0

次のような各行にいくつかの値を含むテキストファイルがあります。

xxx.xxxxxx

各行を読み取り、strod() を使用してそれらを str に変換し、それらを一時的な double 変数に格納しています。

その double 変数の値を出力すると、ポイントの後にあるべきよりも多くの桁が出力されます。

予想される出力は次のようになります。

xxx.xxxxxx

しかし、私は得ています

xxx.xxxxxxxxxxxxxxxx

setprecision(20) を使用します。なぜこれが起こっているのですか?また、ファイルの内容を正確に読み取るにはどうすればよいですか?

4

2 に答える 2

4

出力で 20 桁の精度を要求すると、それが得られます。明示的に要求したものを取得していることに驚いているようです。20 桁の精度以外は驚きです。

あなたが読んだものに関しては、通常、小数点以下6桁の数値はdoubleで正確に表現されません。strtod()最も近い近似値を返します。

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.htmldoubleを読んで理解するまで 、使用しないことをお勧めします。 は実数ではありません。double

于 2012-08-15T08:04:56.793 に答える
2

そのファイルの内容を読み取っていますが、正確な数を保存することはできません。doubleすべての数値を a (またはそれ以外のもの)として正確に表現できるわけではありません。したがって、近似値が得られます。

于 2012-08-15T07:47:18.180 に答える