5
#include <iostream>
using namespace std;

int main()
{
    cout.precision(32);

    float val = 268433072;
    float add = 13.5;

    cout << "result =" << (val + add) << endl;
}

上記のプログラムを標準でコンパイルし、g++ main.cc
実行しています./a.out

しかし、私が受け取る出力は、
result =268433088

明らかに、これは正しい答えではありません.なぜこれが起こっているのですか?

EDITdouble :代わりに使用する場合、これは発生しませんfloat

4

2 に答える 2

1

(1991、PDF)への参照は別として、すべてのコンピュータ科学者が浮動小数点演算について知っておくべきこと

簡単に言えば、floatには(他のプリミティブと同様に)ストレージが限られているため、エンジニアはどの数値をどの精度で格納するかを選択する必要があったということです。浮動小数点形式の場合、彼らは小さな数値(一部の 10 進数) を正確に格納することを決定しましたが、大きな数値は非常に不正確です。気づいたことです。

于 2013-07-05T18:59:28.087 に答える