ホーム ] 実行時間計測ラブラリ ] EXIF情報ライブラリ ] 文字式演算 ] クイックソートライブラリ ] 多倍長演算ライブラリ ] 多倍長演算ライブラリU ] 画像処理ライブラリ ]

上へ
多倍長語の構造
プログラミング仕様
インストール
ユーティリティ
数学定数システム
四則演算
数学関数

多倍長演算ライブラリU(CompactPrecision)

技術解説/数学関数

最終更新日:2007/04/26 新規

●概要

 MegaPrecision とほぼ同じであるが、桁数が短い分、高速化にこだわる必要はない。

●収束判定

 級数やニュートンの収束判定は、公称精度 + 拡張精度/2 としている。実際には、4000 + 96/2 =4048 となっている。これにて、4000桁を保障している。

●平方根/立方根

 桁数が短いので、通常の15桁の初期値による逆数ニュートン法で求めている。

●逆数

 多段初期値によるニュートン法で求めている。

●指数関数

○整数指数

 二進展開法で演算している。

 指数が、Long を超える場合は、CompactLong の整数を指数にできる。その場合は、以下のように二進展開される。

C=AB の内部関数。BはCompactLong の整数

Friend Sub CIPower(ByRef A As CompactLong, ByRef B As CompactLong, ByRef C As CompactLong)
   Dim Rf As Integer = 0
   Dim BB As New CompactLong(B.Abs.IntegerPart)        '整数部が採用される
   If B.Sign = CompactSign.Negative Then                      'Bが負の場合
      Rf = 1
   End If
   C.SetValue(1)
   Dim CC As New CompactLong(A)
   Dim Q As New CompactLong(0)
   Do
      If Not Modulo(BB, cTwo, Q).IsZero Then                   ' B Mod 2 が 0 でなければ、An を乗積する
         C = Mul(C, CC)
      End If
      If Q.IsZero Then Exit Do                  ' Q = BB \ 2 (Long の場合はシフト)
      BB = Q.Clone
      CC = Mul(CC, CC)                                                'An 生成
   Loop
   If Rf = 1 Then
      C = Recipro(C)
   End If
End Sub

Exp

 指数を、整数部と小数部に分離し、それぞれを演算して積を求めている。指数小数部が、10-7以上であれば、1億分の1(1/N法)にし、級数でもとめ、結果を1億乗している。指数分割法は採用していない。

○実数指数

 Expとほぼ同じ。ABの時、級数の変数が、ln(A)・B になるだけ。

●対数関数

○自然対数

 差分法で求めている。

○常用対数

  仮数部の自然対数をもとめ。定数Ln10 で除したものと指数部を加算している。

●三角関数/逆三角関数

○Sin/Cos

 角度を1/520 し、級数で求め、5倍角公式で漸化して求めている。

○ASin/ACos

 差分法で求めている。余角法は採用していない。

ATan

 変数の絶対値が、10-15以下なら、直接級数で求め、1015以上なら、余角法で求め、それ以外で、100以上なら、余角法+差分法で、いずれでもなければ、差分法で求めている。

●双曲線関数/逆双曲線関数

 数学の定義式でそのまま求めている。