UltraLong構造体 |
入出力メソッド |
最終更新日:2006/04/03
仕様変更 |
●概要
数値の内容を外部に表現したり、内部に保存したりする。
●関数仕様1(テキスト群)
文字列(テキスト)にて入出力を行う関数で、
・Format (Enum NumFormat)
Exponent
指数表示
FixedPoint 固定小数点表示
にて、その形式を指定できる。
○ToNumString(ByVal Format As NumFormat,
Optional ByVal FractionLength As Integer = 0) As String
Format で指定された形式で、数値を文字列にする。 FractionLength は、小数点以下の表示桁数を制限するときに指定する。
デフォールトは、全桁。実際に制限があった場合は、数値の末尾に、・・
が付加され、それ以下が省略されたことを表す。小数部がない場合や、指定された桁未満の場合は、制限されない。
<用例>
123456789.123456789 / 987654.321 の演算結果例(精度が500桁)
・ToNumString(Expornent):指数表示
1.2499999898593749887517578126406030273419924621582250942230221863222122226709723472166128 456597923394292525957571343425530358207180870522410239118469872011019126599862260917501721 738531228478268359644021645504449729431194378382110070270223624121622204698479722441269003 469484137456631448281792106896477598663794030016702574624791217817190109777285123627783935 954652700800566841239992914484500088568943748892888203138838897460764513781740443577728244 4552783969443090200381961372495225482843809681E+2
・ToNumString(Fixedpoint):固定小数点
124.99999898593749887517578126406030273419924621582250942230221863222122226709723472166128 456597923394292525957571343425530358207180870522410239118469872011019126599862260917501721 738531228478268359644021645504449729431194378382110070270223624121622204698479722441269003 469484137456631448281792106896477598663794030016702574624791217817190109777285123627783935 954652700800566841239992914484500088568943748892888203138838897460764513781740443577728244 4552783969443090200381961372495225482843809681
・ToNumString(Expornent, 15):指数表示
1.249999989859374・・E+2
・ToNumString(Fixedpoint, 15):固定小数点
124.999998985937498・・
○StoreNumString(ByVal FP As String, ByVal
Format As NumFormat, Optional ByVal Comment As String ="")
ToNumString された文字列を、テキストファイルとして書き出す。FP
に、ファイルフルパスを指定する。ベタ書きだと扱いにくいので、80文字を一行となるようにしている。Comment が、空白でなければ、最初の行が、"/
"+Comment になる。
<用例>
Dim A As New UltraLong("3.14159")
A.StoreNumString("C:\MyUltra\MyPI.txt", Fixedpoint)
○LoadNumString(ByVal FP As String)
StoreNumString でファイルされたような形式のテキストファイルをUltraLong値とする。ファイルが不正であれば、値 0
となる。形式が文字列数値であれば、読み込むことができる。行頭が、"/"や"[" の場合は、読み飛ばす。
<用例>
Dim A As New UltraLong(0)
A.LoadNumString("C:MyUltra\MyPI.txt")
●関数仕様2(バイナリ群)
UltraLong値をバイナリ形式でファイルに入出力する。テキストは簡便ではあるが、その性質上、処理時間が掛かる。処理時間が気になる場合は、このバイナリ関数を利用する。ファイル形式は以下の通り。h
は、16進数。2文字が1バイトとなる。
ちなみに、100万桁の数値では、およそ、500kB のバイナリファイルとなる。テキスト形式では、1MB。
hEEEE 開始マーカ
aaaaaaaa
指数部
bbbbbbbb
符号
cccccccc
実桁数
dddddddd
仮数部配列サイズ
gggg gggg ・・・・ ggggg 仮数部配列(可変長)
hFFFF 終了マーカ
○StoreValue(ByVal FP As String)
自分の値を、上記の形式で、ファイルに書き出す。FP に、ファイルフルパスを指定する。ファイル名の拡張子は任意。
<用例>
Aの値 1.23456789123456789 を、バイナリファイルとして保存
A.StoreValue("C:\MyUltra\MyValue.ulv")
このファイルをHexダンプすると、
01 EE EE 00 00 00 00
00 00 00 00 12 00 00 00 03 00
02 00 00 4E 61 BC 00 07 21 70 05 40 08 4E 05 FF FF
のようになる。EEEE
は、開始マーク(2バイト、Short)、その後、4バイト単位(Integer)で、指数部、符号、実桁数、仮数部配列サイズ、仮数部配列(可変サイズ) と並ぶ。FFFF
は、終了マーク(2バイト)。数値は、スモールエンディアンで並ぶ。12345678 = h00BC614E
であるが、Hexダンプの緑色の数値がそれである。
○LoadValue(ByVal FP As String, Optional
ByVal Limit As Integer = 0)
FPのファイルパスに保存されたバイナリファイルを読みとり、自分の値にする。Limit
にて、精度(桁数)をどれだけ読むのかを以下のように決める。
<0 別途指定された精度
0 ファイルにある精度(デフォールト)
>1 Limit分
●関数仕様3(型変換)
UltraLong値を標準のデータ型に変換する。
○ToInteger(Optional Mode As ConvMode =
Strict) As Integer
値がIntegerの範囲であれば、Integerが返る。それ以外は、0 となる。
Strict:(デフォールト)完全な整数のみが対象
Truncate:小数部は切り捨てられる(四捨五入ではない)
○ToLong(Optional Mode As ConvMode = Strict)
As Long
値がLongの範囲であれば、Longが返る。それ以外は、0 となる。
Strict:(デフォールト)完全な整数のみが対象
Truncate:小数部は切り捨てられる(四捨五入ではない)
○ToDouble As Double
値がDoubleの範囲であれば、Doubleが返る。それ以外は 0 となる。概ね、有効桁は15桁となり、それ以降は四捨五入される。
|