上へ 整数 → MegaLong 実数 → MegaLong 10進数 → MegaLong 文字列 → MegaLong 整数部分 小数部分 部分値 MegaLong → Long MegaLong → Double 文字列変換
| |
数値変換 |
MegaLong → Long |
最終更新日:2006/11/29 新規 |
●概要
MegaLong の整数部分をLong として返す。
●方法
1億進数を通常の2進数値に変換することになる。
- 指数が 1〜19 までを対象とする。以外は、0 を返す。
- 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) '変換する配列数
- その仮数部配列要素 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)
となる。
- 符号を設定する。
例えば、0.123456789876543E12 であれば、i = 0 to 1 で、
12345678・10-8+12 + 98765430・10-16+12
= 12345678・104 + 98765430 \ 104
= 123456780000 + 9876
= 123456789876
となる。
|