我想创建一个使用十进制数的程序,所以我想我需要使用float类型,但我不明白这些类型的行为方式。我做了一个测试:
#include <stdio.h>
#include <float.h>
int main(void)
{
float fl;
fl = 5 - 100000000;
printf("%f\n", fl);
fl = FLT_MAX - FLT_MAX * 2;
printf("%f\n", fl);
fl = -100000000000000;
printf("%f\n", fl);
return 0;
}
输出:
-99999992.000000 // I expected it to be -99999995.000000
-inf // I expected it to be -340282346638528859811704183484516925440.000000
-100000000376832.000000 // I expected it to be -100000000000000
为什么结果与我的期望不同?
编辑:感谢那些不仅仅因为某些原因而无视我的问题的人,并且实际上试图帮助我。但是,我在this thread中学到的东西并没有帮助我理解为什么一些包含整数的浮点变量(以.000000结尾)表现得很奇怪。答案 0 :(得分:-1)
我不确定,但我有一些想法。
在浮点数中,任何数字由2部分组成:m,p。任何数字都可以显示为:
X = m * 2 ^ p。 (m和p - 二进制.0 BUT。如果X和Y的p值太大,我们在(*)行中会遇到一些问题。 m的位数有限,所以:
例: 希望你得到我想说的话X=0.5, Y=1.45
0.55+1.45
0.55 * 10^0 + 0.145 * 10^1
0.055 * 10^1 + 0.145 * 10^1 (*)
0.200 * 10^1
X = 0.1, Y = 0.000000000000000001
X + Y = 0.100000000000(000001) <- this part didn't fit into m, so
X + Y = 0.1.