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 を減算すると結果は同じになり、他の大きな float から 1 を減算すると、結果は初期値よりも大きくなります。

gcc バージョン 4.7.2 を使用しています。ありがとうございました。

4

1 に答える 1

3

から 1 を引いてmyFltMaxも、最初の数よりも大きな差は得られません。同じ番号を取得します。同様に印刷すると、 であり、 ではないmyFltMaxことがわかります。340282356122255360340282346638528859

証明

基本的に、コンパイラはあなた340282346638528859を浮動小数点型で表現できる最も近い値に丸めます340282356122255360

于 2013-04-03T09:12:50.940 に答える