将同一实数分别赋值给单精度和双精度类型变量,然后打印输出。
#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 型变量,输出结果会有所不同呢?
1
co3site 2016-10-19 00:47:44 +08:00 via Android 1
float 和 double 的精度取决于尾数的位数.
float 尾数位有 23 位,而 double 尾数位有 52 位 2^23 = 8388608 一共七位,则 float 的精度为 6-7 为位 2^52 = 4503599627370496 一共 16 位,那么 double 的精度为 15-16 位 |
2
msg7086 2016-10-19 00:58:36 +08:00
这两个结果不都是 123456.789e4 吗?
|
3
bazingaterry 2016-10-19 01:02:48 +08:00
哈哈不需要精通底层吧, 1L 基本说清楚了。
|
4
ryd994 2016-10-19 02:59:40 +08:00 via Android
低位低于最小进度被约掉了
不砍掉点精度, float 和 double 有什么区别嘛 |
5
zhujinliang 2016-10-19 08:36:24 +08:00 via iPhone
我一直没意识到 float 精度是这么低
|
6
aheadlead 2016-10-19 09:38:18 +08:00
|