2017-11-06 7 views
-1
float.Parse("534818068") 

リターン:534818080小数点なしのfloat.Parse()が返される理由は間違った結果ですか?

私は浮動小数点以下の値を持つ多くの合併症があることを理解しています。しかし、誰かが私にこの行動を説明するかもしれない。

ありがとうございます!

+0

'float'は単精度になりがちですが、10桁未満の浮動小数点表記しかサポートしていません。私が得るのは、実際に7桁に丸められた '5.348181E + 08'です。 –

+0

「浮動小数点数には多くの問題があることを理解しています」 - 理解している合併症は何ですか? – Enigmativity

答えて

1

浮動小数点数は7,8桁などの相対的な精度を持ちます。実際の合計サイズとは関係なく、最初の7桁または8桁だけが正しいです。

0

浮動小数点数はIEEE 754標準(符号、バイアスされた指数部および小数部)を使用して内部的に格納されます。

float数値は32ビット表現で格納されます。つまり、精度は7桁です。 一方、doubleは64ビット表現で格納されているため、15〜16桁(source)です。

これは、通常、浮動小数点数を平等のために比較しないでください。

+0

それはOP自体が何を見ているのかを説明するものではありません。 (たとえば、 'double 'の場合は問題ありません。) –

+0

True。 doubleはより大きな精度を持っているから(floatの場合は64ビットと32ビットで保存されるため)しかし、私はOPが見ていることの説明は、数字が内部的にどのように表現されるかにあると考えています。 – yorah

+0

実際はそうではありません。精度に言及することなく、まったく答えないからです。整数は常にその整数を扱うのに十分な仮数を持つバイナリ浮動小数点型で正確に表現することができます。基本的に、関連する情報の半分しか現時点では提供していません。それは良いスタートですが、それは*まだ*の質問に答えることはありません。 –

関連する問題