2011-10-24 7 views
2

可能性の重複:私のC++コードで
Precision of Floating Point
Can you compare floating point values exactly to zero?
floating point issueなぜ文字列から浮動小数点への変換が機能しないのですか?

私は、文字列があります: "0.55"。

そして私は値をfloatにそれを変換する「0.55」が、私は私のfloat値「0.55000001」を与える使用されるすべての機能。

なぜですか?どのように私は明確な価値を取ることができますか?

コードの最終バージョンは次のとおりです。

wstring s = L"0.55"; 
float f = stof(s); 
+0

あなたは浮動小数点演算についての詳細を読んでください:浮動小数点数が制限された精度を持っています。既存の値をすべて表すことはできません。 – ereOn

答えて

4

フロートが正確ではありません。これは、可能な値の無限の数が存在するためですが、有限のビット数のみを表すためです。

0.55は表現できないため、代わりに0.55000001という値が得られます。

詳細情報はで見つけることができます:ありwhat every programmer should know about floating points arithmetics

+1

この論文のタイトルは、「プログラマー」ではなく「コンピュータ科学者」と言われています。プログラマーにとってより有用なリソースを提供しようとしている私の返答を見てください。 –

+0

フロートは正確です。彼らは実数ではありませんが、他の何か(算術のルールは特に異なります---加算は連想ではありません)などです。 –

+0

の論文を理解することはできない誰かが 'float'または' double'を使ってプログラムを書くべきではありません@MichaelBorgwardt。 –

3

0.55は、正確なバイナリ表現を持っていません。常に丸め誤差があります。

1

float値0.55ではありません - フォーマットは、その値を表すことはできません。

は、詳細な説明のためFloating-Point Guideをお読みください。あなたは小数の正確な表現が必要な場合は

は、GMP libraryによって提供されるような小数点形式を使用します。

0

あなたは少し代数を使用することができますし、0.55 wstringのS = L「0.55」を取得します。 float f = stof(s);

use floor function 
f = floor(f); 

関連する問題