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

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

数値変換

実数 → MegaLong

最終更新日:2007/04/26  訂正

●概要

 実数とは、Single、Double を言う。

●方法

  1. 0 はZero とする。
  2. 符号を決定。
  3. 10進としての指数を以下のようにして10の対数を求めて決定する。

    Dim ex As Integer = GetDecPower(V) + 1           '10進指数を求める関数(下記)
     
  4. 仮数を、10進で、0.99999・・・999 の形式にする。vv = V * 10-ex
  5. vv を正規化された整数 VL にする。
    Single   VL = CLng(vv * Base)                 (8桁の整数)
    Double  VL = CLng(vv * Base * Base)       (16桁の整数)
  6. 有効桁数にする。
    VL = (VL \ 10) * 10    末尾を切捨てる
  7. 配列にする。
    Single  Mant(0) = VL
    Double
      VL >= Base のとき
       Mant(0) = VL \ Base
        Mant(1) = VL Mod Base
      else
        Mant(0) = VL
     
  8. 指数部は ex とする

10進の指数を求める関数、Log10 の値を補正している。Double では、0.9999999999999999 = 1 になってしまう弊害を補正している。

Friend Function GetDecPower(ByVal V As Double) As Integer
   Dim p As Integer = Int(Math.Log10(V))
   Dim F As Double = 10 ^ p
   If V >= F Then
      Return p
   ElseIf V < F Then     '10n - ε の場合の補正
      Return p - 1
   End If
End Function