ホーム ] PC技術/システム技術 ] VB.NETプログラミング ] なるほどナレッジ ] インフォメーション ]

上へ
基本事項
ソフトウェア構成
UltraLong構造体
UltraMath
FFT
プログラミング例
UltraPrecisionユーティリティ
FFT試験
レガシ演算速度
FFT演算速度
数値/浮動小数点/精度
定数システム
レガシ四則算
FFT乗算
ニュートン法
逆数法
数学関数
時間評価システム
限界値自動決定システム
数学定数算出

多倍長演算ライブラリ(UltraPrecision)

プログラミング例

最終更新日:2006/04/18

 UltraPrecisionによる具体的なプログラム例を紹介する。

 内部のプログラムであるが(一部、内部プロパティを参照している)、参考にしてほしい。

自然対数をラフ値と真値の差分から算出するプログラムである。

Imports UltraPrecision.UltraMath

Dim cOne As New UltraLong(1)
Dim cTwo As New UltraLong(2)

Friend Function CLn(ByRef A As UltraLong) As UltraLong
   Dim k As Integer
   If A.IsZero OrElse A.IsNegative Then
      CLn = New UltraLong(0)
      CLn.Status = ULStatus.OverFlow
      Return CLn
   ElseIf A.Mant.Length = 1 AndAlso A.Mant(0) = NormT(0) Then
      CLn = New UltraLong(Mul(A.Exp, Ln10))
      Return CLn
   Else
      Dim M As New UltraLong(A.Mantissa)
      Dim rd As Double = Math.Log(M.ToDouble)
      Dim r As New UltraLong(rd)
      Dim aa As New UltraLong(Div(M, Exp(r)))
      Dim X As New UltraLong(Div(Subt(aa, cOne), Add(aa, cOne)))
      Dim XX As New UltraLong(Mul(X, X))
      Dim S As New UltraLong(X)
      Dim SS As New UltraLong(0)
      Dim SM As New UltraLong(X)
      For k = 2 To 200000
         S = Mul(S, XX)
         SS = Div(S, 2 * k - 1)
         SM = Add(SM, SS)
         If SS.IsZero OrElse SS.Exp < -ULtd Then Exit For
      Next
      Return Add(Add(Mul(cTwo, SM), r), Mul(Ln10, A.Exp))
   End If
End Function