2011-09-16 10 views

答えて

8

浮動小数点型と整数型は、バイナリ表現が異なるため、直接比較することはできません。

浮動小数点型として0.1を10倍加算した結果は、が、に近い値になりますが、正確ではありません。

浮動小数点値を比較する場合、値が異なる可能性がある最小値を使用する必要がありますが、それでも同じ値と見なされます(通常、この値はイプシロンと呼ばれます)。この値はアプリケーションによって異なります。

詳しくは、What Every Computer Scientist Should Know About Floating-Point Arithmeticをお読みください。 1.01をcomaringについては


- これらは、さまざまな種類がありますので、お互いに比較することはありません。

+0

を参照してください。なぜそれを1から印刷するのですか?もしそうなら、それを比較する最良の方法は何でしょうか?すごい! – Bartzilla

+0

@エドゥアルド - どのように印刷しますか? – Oded

+0

MsgBox(d)またはConsole.WriteLine(d) – Bartzilla

2

これは、doubleは常に値の近似値であり、正確な値そのもの(浮動小数点値など)ではないためです。正確な10進値が必要な場合は、代わりに10進数を使用します。

コントラスト:

Dim d As Decimal 

For i = 1 To 10 
    d = d + 0.1 
Next 

MsgBox(1) 
MsgBox(d = 1) 
MsgBox(1 - d) 
3

0.1(1/10)は、バイナリに変換繰り返し分数ある:

.0001100110011001100110011001100110011 .....

1/3を小数として表示しようとするようなものでしょう。正確に行うことはできません。

+0

私は..を参照して、なぜdが1に設定されているのですか?それがちょうど1でない場合... – Bartzilla

+0

これは[ieee754]の機能です(http://en.wikipedia.org/wiki/IEEE_754-2008) –

関連する問題