misc.log

日常茶飯事とお仕事と

IPAの研修ロードマップに従って研修しているのに大脱線する(4月24日)

エンジニア基礎 / データ表現

序盤は鳥取島根。ラクダ。講義前の会話からラクダ、鳥取、そして島根。そこから出雲大社ルートの神社仏閣でアニメ漫画多いよね、の流れ。

るるぶ鳥取 大山 蒜山高原 水木しげるロード'20 (るるぶ情報版地域)

るるぶ鳥取 大山 蒜山高原 水木しげるロード'20 (るるぶ情報版地域)

浮動小数点型の誤差実験

VBAで、Double型(倍精度浮動小数点型、データサイズ64bitの浮動小数点数)で足し算を繰り返すと誤差が出るサンプルは下記の通り。

Public Function CalcCorrectnessTest() As Double
 
    Dim result As Double
    Dim d As Double
    Dim i As Long
    
    d = 0.1
    
    For i = 1 To 10000
        result = result + d
    Next
    
    CalcCorrectnessTest = result
    
    'MsgBox result
 
End Function

Doubleの場合、1万回、0.1を加算すると「1000.00000000016」になります。逆に「Single(32bit浮動小数点型)」でやるとどうなるか、試してみても面白いかも知れません。 さらに、二進化十進数を使って誤差が出ないようにしたバージョンはこちら。

Public Function CalcCorrectnessTest() As Variant
 
    ' VariantはVBAの「何でも入るデータ型」
    Dim result As Variant
    Dim d As Variant
    Dim i As Long
    
    d = CDec(0.1)   ' CDecで数値をDecimal型(二進化十進数)に変換
    
    For i = 1 To 10000
        result = result + d
    Next
    
    CalcCorrectnessTest = result
    
End Function

Excelで操る! ここまでできる科学技術計算 第2版

Excelで操る! ここまでできる科学技術計算 第2版