2012年12月8日土曜日

[ExcelVBA] 浮動小数点問題


アドベントカレンダー 8日目

たまには、こんなネタも。
45.2 - 38.8 はいくつでしょうか?
では、計算してみましょう。
  1. Option Explicit  
  2.   
  3. Sub SampleCode()  
  4.     Dim a As Double  
  5.     Dim b As Double  
  6.       
  7.     a = 45.2  
  8.     b = 38.8  
  9.       
  10.     Debug.Print a - b  
  11. End Sub  

結果は
6.40000000000001
です。

こんなに簡単んそうな計算結果でも誤差が出てしまいます。
これは、IEEE 754という数値計算の標準規格を利用しているものなら
全て発生する問題だそうで、詳細を知りたい場合は以下サイトなんかを
眺めるとよいと思います。

第4回 演算誤差の正体

0 件のコメント: