有没有精通底层的大神,为什么同一个实数赋值给 float 型变量和 double 型变量,输出结果会有所不同?

2016-10-19 00:22:23 +08:00
 blublu

将同一实数分别赋值给单精度和双精度类型变量,然后打印输出。

#include <stdio.h>
main()
{
	float a;
	double b;
	a = 123456.789e4;
	b = 123456.789e4;
	printf(“%f/n%f/n ”,a,b);
}
```		
运行结果如下:
1234567936.000000
1234567890.000000

问题:为什么同一个实数赋值给 float 型变量和 double 型变量,输出结果会有所不同呢?
3619 次点击
所在节点    问与答
6 条回复
co3site
2016-10-19 00:47:44 +08:00
float 和 double 的精度取决于尾数的位数.
float 尾数位有 23 位,而 double 尾数位有 52 位
2^23 = 8388608 一共七位,则 float 的精度为 6-7 为位
2^52 = 4503599627370496 一共 16 位,那么 double 的精度为 15-16 位
msg7086
2016-10-19 00:58:36 +08:00
这两个结果不都是 123456.789e4 吗?
bazingaterry
2016-10-19 01:02:48 +08:00
哈哈不需要精通底层吧, 1L 基本说清楚了。
ryd994
2016-10-19 02:59:40 +08:00
低位低于最小进度被约掉了
不砍掉点精度, float 和 double 有什么区别嘛
zhujinliang
2016-10-19 08:36:24 +08:00
我一直没意识到 float 精度是这么低
aheadlead
2016-10-19 09:38:18 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/313727

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX