-2

VC++ 2010 コンパイラを使用しています。私の以下のコードは509を与えます:

double volume = 5.1;
int n = static_cast<unsigned int>(volume * 100.0);

私は何かが恋しいですか?

ありがとう

4

2 に答える 2

6

浮動小数点データ型ですべての数値を表すことはできません。お使いのコンピューターは 2 進浮動小数点を使用するため、表現可能な数値はs2 eの形式のみです。ここで、sは仮数、eは指数です。そして、5.1 がその型にはまらないことは容易にわかります。正確には表現できません。

このページでは、5.1 に最も近い正確に表現可能な倍精度浮動小数点値を示します。値は次のとおりです。

5.09999 99999 99999 64472 86321 19949 90706 44378 66210 9375

したがって、5.1 に最も近い値は 5.1 よりわずかに小さい値です。これを 100 倍して切り捨てると、509 になります。

このトピックについて詳しく学ぶための標準的なリファレンスは、David Goldberg のWhat Every Computer Scientist Should Know About Floating-Point Arithmeticです。

于 2013-04-02T09:07:45.917 に答える
0

5.1 は 5.099999 と表されますが、100.0 をかけると 509.9990 になります。int に変換すると 509 になります。

于 2013-04-02T09:17:41.640 に答える