C float类型如何工作?

时间:2017-06-03 09:40:13

标签: c

我想创建一个使用十进制数的程序,所以我想我需要使用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结尾)表现得很奇怪。

1 个答案:

答案 0 :(得分:-1)

我不确定,但我有一些想法。 在浮点数中,任何数字由2部分组成:m,p。任何数字都可以显示为: X = m * 2 ^ p。 (m和p - 二进制.0

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

BUT。如果X和Y的p值太大,我们在(*)行中会遇到一些问题。 m的位数有限,所以: 例:

X = 0.1, Y = 0.000000000000000001
X + Y = 0.100000000000(000001) <- this part didn't fit into m, so
X + Y = 0.1.

希望你得到我想说的话