上へ 基本事項 ソフトウェア構成 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
|