[娱乐] 浮点数那点事
我们首先看一个程序:程序代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
float a, b, d;
double c;
a = 123.45;
b = 123.5625;
c = 123.45;
d = 123.7;
printf("a = %f, b = %f, c = %f, d = %f\n", a, b, c, d);
return 0;
}
猜想一下,程序运行之后会输出什么?
我们都知道float是单精度,double是双精度,都保留了小数点后6位数字。所以,有些朋友会想当然认为输出是:
a = 123.450000, b = 123.562500, c = 123.450000, d = 123.700000
猜想是否正确?我们大家不妨验证一下。然后想想这是为什么。
----------------解决方案--------------------------------------------------------
除了B...其他三个的值全变了...
(B能不能完全表示成二进制忘了.懒得试验)
我觉得是这样
[[it] 本帖最后由 peach5460 于 2008-3-12 13:17 编辑 [/it]]
----------------解决方案--------------------------------------------------------
float最高只能8位有效数字
double是15位还是多少,忘记了
----------------解决方案--------------------------------------------------------
我的意思是...因为有些数的小数部分不能完全化成二进制(我不知道怎么表达,熟悉二进制和十进制换算的应该知道我在说什么)
而Float是IEEE32.24规范...Double是64.53规范...
存储的时候肯定会有误差...
转换类型来输出的时候,肯定会因为截断,放大这种误差...造成输出和赋的值不一样...
----------------解决方案--------------------------------------------------------