既然是“求助”,那为什么在整个帖子中看不到你的任何提问?全是陈述句。
123.456×3≠370.368
你的这个“123.456”是什么?是C语言范畴中float/double/long double的double,还是数学范畴中的“实数”?但无论是哪个,你这个结论看起来都不正确呀
程序代码:
#include <stdio.h>
int main( void )
{
if( 123.456*3 == 370.368 )
puts( "123.456*3 == 370.368" );
else
puts( "123.456*3 != 370.368" );
}
如上代码,你编译运行后输出什么?
123.456×3=370.36799999999999999999999
这个看起来你前面两个说的是“double”,后面说的是“实数”,挺别扭的,类似于 1+2不写等于3而写等于洋文的three。
按C语言来写是 123.456×3=370.368
按实数来写是 123.4560000000000030695446184836328029632568359375 × 3 = 370.36799999999999499777914024889469146728515625
number数据 转字符 char数据时,做了位数限制。
如果,不做限制,一点转换就没有了响应。只能任务管理器里结束进程。或者长按电脑电源。。。
想关机,开始菜单也没有反应。。。。
不知所云
------------------------------------------------------------------------------------
浮点数 的本质是 以
有限位二进制表达的科学计数法。
以十进制的 123.456 为例,123.456 用二进制表达需要
无限多的位,但double是有限的,因此只取前面53个有效数,即 1.1110110111010010111100011010100111111011111001110111 * 2^6(十进制的 123.4560000000000030695446184836328029632568359375)。
在“实数”眼中,给出了 123.456,但存成了 123.4560000000000030695446184836328029632568359375;
在“double”眼中,给出了 123.4560000000000030695446184836328029632568359375 也存成 123.4560000000000030695446184836328029632568359375,“double”看待 123.456 和 123.4560000000000030695446184836328029632568359375 是一模一样的,找不出两者丝毫的差别。同样,370.36799999999999499777914024889469146728515625 和 370.368 在double眼中也是同一个数。
1.1110110111010010111100011010100111111011111001110111 * 2^6 (十进制的 123.4560000000000030695446184836328029632568359375)
* 1.1000000000000000000000000000000000000000000000000000 * 2^1 (十进制的 3)
--------------------------------------------------------------
= 1.0111001001011110001101010011111101111100111011011001 * 2^8 (十进制的 370.36799999999999499777914024889469146728515625)