c 语言 之 加法出问题
正在学校机房上c语言的实验呢,突然同学问我一个教科书上的例子,其中有一个问题,我一看也不知道怎么办了,先看代码:
[c]
#include “stdio.h”
main()
{
double a = 111111.111, b = 222222.222, c;
c = a + b;
printf(”%f”, c);
}
[/c]
输出的结果是 333333.312500
很奇怪阿…… 可是我把 float 改成 double 之后就好了
后来上网查了一下,发现看来还是浮点数的精度问题:
一个浮点数a由两个数m和e来表示:a = m × be。在任意一个这样的系统中,我们选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。m(即尾数)是形如±d.ddd…ddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b-1)。如果m的第一位是非0整数,m称作规格化的。有一些描述使用一个单独的符号位(s 代表+或者-)来表示正负,这样m必须是正的。e是指数。
由此可见,上述问题就是精度不够的问题,改成 double 就好了。不明白教科书为什么显示出来了这样的问题,却不说明……


















这么专业 - -!
[Reply]
我记得我们老师有说这个问题…我在网上也看到过这个问题…嘿嘿………
[Reply]
什么阿,其实这个问题很basic的……
[Reply]
诡异……我当时就给雷到了。。。
回头好好研究一下这个问题!
[Reply]