数値計算の精度(浮動小数点の計算誤差)
COBOL
小数点のある計算や割り算がある計算をする場合、計算精度を考慮しなければなりません。
小数点を避ける
小数点があるとわかっている場合は整数化して計算する。
COMPUTE A = B * 0.785
COMPUTE A = B * 785
COMPUTE A = A / 1000
割り算は最後にする
COMPUTE A = A / B * C
COMPUTE A = B * C / B
VB.NET
倍精度型数値では正しい値が得られません。Decimal型を使いましょう。
計算精度の検証1
Module Module1
Sub Main()
Dim A As Double = 0
Dim B As Decimal = 0
For i As Integer = 1 To 100
A += 0.1
B += 0.1
Next
Console.WriteLine("0.1を100回加算する")
Console.WriteLine("倍精度型" & A)
Console.WriteLine("十進型" & B)
End Sub
End Module
| 0.1を100回加算する 倍精度型9.99999999999998 十進型10 |
計算精度の検証2
以下のような場合、Decimal型を使っても正しく計算できません。
Module Module1
Sub Main()
Dim A As Double = 1.1 - 1 - 0.1
Dim B As Decimal = 1.1 - 1 - 0.1
Console.WriteLine("計算式1.1 - 1 - 0.1")
Console.WriteLine("倍精度型" & A)
Console.WriteLine("十進型" & B)
End Sub
End Module
| 計算式1.1 - 1 - 0.1 倍精度型8.32667268468867E-17 十進型0.0000000000000000832667268469 |
計算精度の検証2-1
定数には末尾にDを付けることでDecimal数値となります。
Module Module1
Sub Main()
Dim A As Double = 1.1 - 1 - 0.1
Dim B As Decimal = 1.1D - 1D - 0.1D
Console.WriteLine("計算式1.1 - 1 - 0.1")
Console.WriteLine("倍精度型" & A)
Console.WriteLine("十進型" & B)
End Sub
End Module
| 計算式1.1 - 1 - 0.1 倍精度型8.32667268468867E-17 十進型0.0 |
お役に立てましたか?
IT、プログラミングのランキングサイトはこちらです。
最新記事の自動受信登録はこちらです。 |
![]() |
![]() |
![]() |
![]() |
| 固定リンク







コメント