2011-12-03 3 views
0

私はC++ Primer Plusを使用しています。私のIDEとしてXcodeを使用しています。シンボリック定数に値0.0254を代入する演習がありますメートル)。問題は、私が定数を宣言するとき、私は0.0253999997の値を得ているということです。私は下のように定数を宣言しています。C++(Xcode IDE)

#include <iostream> 
const float METERS_PER_INCH = .0254; 
+0

これは変です、0.0254fを試してみてください。 – ScarletAmaranth

+0

ようこそスタックオーバーフロー! C++で始めるなら、私は[良い入門C++の本](http://stackoverflow.com/q/388242/46642)をお勧めします。今私はあなたの質問に答えることができます:) –

+0

私は0.0254f、おかげで試してみます。また、私が問題を抱えているこの練習問題は、C++ Primer、第3章、エクササイズ#2(インチからメートルへの変換)です。 –

答えて

0

Macは大丈夫ですか?

問題は、コンピュータが浮動小数点数と複素数を正確に表すことができないため、これが表示されていることです。

Why comparing double and float leads to unexpected result?

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

strange output in comparison of float with float literal

Googleはあなたの友達です!

+0

私は実際にスタックのポスティングを見つけましたが、もう少し理解しています。助けてくれてありがとう。 –

1

これは、(我々はベース10数体系に丸めずに1/3を書き込むことができない方法を考える)ベース2番号システムに数値を格納フロートに丸め誤差の問題です。これは、基数2以外の数値を格納するときに見られるような小さな丸め誤差をもたらします。

解決策は、整数またはビンガムライブラリを使用することです(私はGNU Multiple Precision libraryを提案します)。 bignumberライブラリは、整数を使って任意の精度の数値を正確に格納します。

+0

ありがとう私はこれをより良く理解するのを手助けしています –