0

以下代码给出了一些奇怪的结果:

#include <stdio.h>
#include <float.h>

int main()
{
    float t = 1.0;  
    float res;
    float myFltMax = 340282346638528859.0;
    printf("FLT_MAX %f\n", FLT_MAX);

    res = FLT_MAX - t;
    printf("res %f\n", res);

    res = myFltMax - t;
    printf("res myFltMax %f\n", res);

    return 1;

}

结果是:

FLT_MAX 340282346638528859811704183484516925440.000000
res 340282346638528859811704183484516925440.000000
res myFltMax 340282356122255360.000000

因此,如果我从 FLT_MAX 中减去 1,结果是相同的,如果我从其他大浮点数中减去 1,则结果大于初始数字。

我正在使用 gcc 版本 4.7.2。谢谢你。

4

1 回答 1

3

如果从中减去 1,myFltMax则不会得到大于初始数字的差。你得到相同的号码。也打印myFltMax,你会看到它是340282356122255360和不是340282346638528859

证明

基本上,编译器会将您四舍五入340282346638528859到可以用浮点类型表示的最接近的值,并且恰好是340282356122255360.

于 2013-04-03T09:12:50.940 回答