当前位置: 代码迷 >> C语言 >> [娱乐] 浮点数那点事
  详细解决方案

[娱乐] 浮点数那点事

热度:435   发布时间:2008-03-12 12:48:14.0
[娱乐] 浮点数那点事
我们首先看一个程序:
程序代码:

#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
猜想是否正确?我们大家不妨验证一下。然后想想这是为什么。
搜索更多相关的解决方案: 点数  float  double  int  单精度  

----------------解决方案--------------------------------------------------------
除了B...其他三个的值全变了...
(B能不能完全表示成二进制忘了.懒得试验)

我觉得是这样

[[it] 本帖最后由 peach5460 于 2008-3-12 13:17 编辑 [/it]]
----------------解决方案--------------------------------------------------------
float最高只能8位有效数字
double是15位还是多少,忘记了
----------------解决方案--------------------------------------------------------
我的意思是...因为有些数的小数部分不能完全化成二进制(我不知道怎么表达,熟悉二进制和十进制换算的应该知道我在说什么)

而Float是IEEE32.24规范...Double是64.53规范...
存储的时候肯定会有误差...

转换类型来输出的时候,肯定会因为截断,放大这种误差...造成输出和赋的值不一样...
----------------解决方案--------------------------------------------------------
  相关解决方案