| | タイトル | : VB2005の倍精度計算精度は? |  | 記事No | : 8273 |  | 投稿日 | : 2008/10/04(Sat) 22:48 |  | 投稿者 | : chime | 
 VB6の計算をVB2005に移植中ですが、計算精度に疑問がでました。VB6では
 Visible = True
 Dim sj1 As Double, sj2 As Double, sj3 As Double
 Dim x As Double
 Dim n As Integer, i As Integer
 Dim sj(500) As Double
 n = 14
 sj3 = 0
 sj2 = 0.00001
 x = 2.40482555769577
 For i = 1 To n - 1
 sj1 = 2# * (n - i) * sj2 / x - sj3
 sj3 = sj2
 sj2 = sj1
 Next i
 Print sj1
 で、答えが8.32489632784927E-12です。
 VB2005では
 Visible = True
 Dim sj1, sj2, sj3, x As Double
 Dim n, i As Integer
 Dim sj(500) As Double
 n = 14
 sj3 = 0
 sj2 = 0.00001
 x = 2.40482555769577
 For i = 1 To n - 1
 sj1 = 2.0# * (n - i) * sj2 / x - sj3
 sj3 = sj2
 sj2 = sj1
 Next i
 Label1.Text = CStr(sj1)
 で答えは8.18545231595635E-12
 と計算結果が異なります。さらにsj2=1.0E-10から始めると
 sj1の答えは値が5桁小さくなりますが、VB6とVB2005では3倍程度結果が異なります。
 
 まだ、どちらの計算が正しいかの検討はしてはいませんが、厄介なことになりそうです。
 
 chime
 
 |