ホーム ] 多倍長語 MegaLong ] 基数変換 ] 数値変換 ] 定数システム ] 演算時間予測システム ]

上へ
整数 → MegaLong
実数 → MegaLong
10進数 → MegaLong
文字列 → MegaLong
整数部分
小数部分
部分値
MegaLong → Long
MegaLong → Double
文字列変換

数値変換

MegaLong → Long

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

●概要

 MegaLong の整数部分をLong として返す。

●方法

 1億進数を通常の2進数値に変換することになる。

  1. 指数が 1〜19 までを対象とする。以外は、0 を返す。
  2. MegaLongの絶対値が 263 未満であれば、Long化できるので、変換する配列数は、

    B は、変換元のMegaLong

    If B.Exp <= B.Length Then
       m = (B.Exp - 1) \ 8                         '整数部.小数部なので、整数部をカバー
    Else
       m = (B.Length - 1) \ 8                     '元々整数
    End If
    m = Math.Min(B.Mant.Length, m + 1)   '変換する配列数
     
  3. その仮数部配列要素 ai に以下の演算を行い総和する(MegaLong の定義式を演算しているだけ)。

     Σ(ai・10-8・(i+1))・10Exp

    指数演算は、以下の関数で整数演算にて行う。DepPow は、10n のテーブル。

    Friend Function DigitAlignment(ByVal V As Long, ByVal E As Integer) As Long
       Select Case E
          Case 0
             Return V
          Case Is < 0
             Return V \ (DecPow(-E))    '冪数が負のときは、整数除算にする
          Case Else
             Return V * DecPow(E)
       End Select
    End Function

    従って、実際の演算部分は、

    DigitAlignment(ai, -8・(i + 1) + Exp)

    となる。
     
  4. 符号を設定する。


例えば、0.123456789876543E12 であれば、i = 0 to 1 で、

12345678・10-8+12 + 98765430・10-16+12
= 12345678・104 + 98765430 \ 104
= 123456780000 + 9876
= 123456789876

となる。