linux C 下定义float 52.1 输出怎么是52.099999

linux C 下定义float 52.1 输出怎么是52.099999,第1张

很正常,这和浮点数在计算机中的表示有关!

浮点数在计算机中是采用二进制科学计数法存储的。

一、浮点数转换成二进制

52.1=110100.0001100110011(小数部分不能完全转换)

二、表示成二进制科学计数法

1.101000001100110011 * 2^5

三、按IEEE754进行数据存储

因此,再将内存中的数据转换成十进制输出来的数据不是完整的52.1,只是非常接近它。

把你的问题理解为:如何将代码中所有的 int 替换为 float?

 sed -e 's/\<int\>/float/' Input.c

结果显示在命令行界面,如果想直接修改文件

sed -i 's/\<int\>/float/' Input.c

我测试了一下,你的结果可能写反了。

而且,测试中发现,如果是short、int类型就没有问题,只是unsigned short , unsigned int有问题

查阅资料也没有非常清晰的说明。

我觉得应该算是C的一个BUG。再等高人吧,看看有没有更清楚的大师。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7086081.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-01
下一篇 2023-04-01

发表评论

登录后才能评论

评论列表(0条)

保存