UltraLong構造体 |
New |
最終更新日:2006/06/10 追加 |
●概要
必ず、Newでインスタンスを生成する。定義のみでは、Empty状態のままで、演算できない。Newの時に、具体的な数値を代入する。数値は、Byte、Short、Integer、Long、Decimal、Single、Double、String、StringBuilder、UltraLong
が可能。これ以外の型の場合は、値 0 となる。
●関数仕様
以下のオーバーロードがある。
○New(ByVal Value As Object) / New(ByRef Value As
UltraLong)
単純に値を指定して生成する。Value として以下の各データ型が扱える。
<許されたObject>
- Byte、Short、Integer、Long
値がそのまま採用される。
- Decimal
小数の場合も含めて、値がそのまま採用される。
- Single
仮数部として、頭から10進7桁までが採用される。8桁目は四捨五入される。符号、指数部はそのまま。
- Double
仮数部として、頭から10進15桁までが採用される。符号、指数部はそのまま。
- String、StringBuilder
文字列で表された数値の場合はその値が採用される。数値の範囲(値、桁数)は、UltraLongの範囲。数値でない場合は、値 0 となる。
- UltraLong
既に生成されたUltraLong がそのままコピーされる。
- 上記以外の型の場合は、値0 となる。
<用例>
Dim K As Long = 123456789 Dim A As New UltraLong(K) Dim B As
New UltraLong(123456789) Dim C As
New UltraLong("99.9811")
Dim D As New UltraLong(99.9811E+5) Dim X As
New UltraLong(C) Dim Y As
New UltraLong(Div(Subt(X,1),Add(X,1)))
当然、UltraMathの演算結果でも良い
○New(ByVal M As Long, ByVal E As Integer)
M を仮数部、E を指数部にしたUltraLongが生成される。内部では、
N = New UltraLong(M) 正規化される
N.Exp = N.Exp + E
指数部が加算される
と処理される。
<用例>
New(12345, 300) とすれば、1.2345E+304 が生成される。仮数部の指数も加算されるので注意方。
○New(ByVal M As Double, ByVal E As Integer)
M を仮数部、E を指数部にしたUltraLongが生成される。内部では、
N = New UltraLong(M) 頭から15桁までが採用され、正規化される
N.Exp = N.Exp + E
指数部が加算される
と処理される。
<用例>
New(12.345678, 300) とすれば、1.2345678E+301 が生成される。仮数部の指数も加算されるので注意方。
○New(ByVal Sign As Integer, ByVal E As
Integer, ByVal ValueArray() As Integer)
Sign を符号、E を指数部、ValueArray() を、そのまま仮数部の配列にして、新しいUltraLongが生成される。但し、ValueArray()は、正規化され、指数部は調整される。また、ValueArray()の各要素は、絶対値の基数剰余に強制変換される。つまり、負数や、基数を超える値は、正の基数未満になる。
文字列に依らないので、多倍長数値を高速に生成できる。
<用例>
VA() As Integer = {12345678, 91234567, 89120000} New(1, 11,VA)
1.2345678912345678912なる仮数部とされる
-123456789123.45678912 が、生成される。
|