64bit変数の計算結果がおかしい

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 64bit変数の計算結果がおかしい

by イグトランス » 2006年12月07日(木) 23:32

今更気付いたのですが,これは単にキャストすれば良かっただけのような気がします。

コード: 全て選択

Dim value As Int64
Dim i As Long
For i = 0 To 18
    value = (10 ^ i) As Int64 - 1
    debug
Next

by OverTaker » 2006年12月02日(土) 00:09

わざわざコードまでありがとうございます。
これを使うかはまだわからないですが、参考にさせていただきます。こちらでもいい方法を模索したいと思います。

by イグトランス » 2006年12月02日(土) 00:00

試しにOLEオートメーションのVARIANT型(内部形式:Decimal(十進小数)型)に変換し,VARIANT型の演算関数で行わせたところ正しい結果にさせることができました。
ただし,これはもはや64ビット演算ではありません。
VARIANT型はメンバ変数vtに現在保持しているデータ型を格納し,llValの部分(実際には共用体)に実際のデータを格納すると言う形式です。

また十進型はVBA 6のリファレンスで次のように説明されている型です。
10 進型 (Decimal)
10 の累乗の指数によって算出される、10 進数を格納するデータ型。小数点以下の桁数が 0 の場合 (小数部分を持たない場合)、絶対値の最大値は 79,228,162,514,264,337,593,543,950,335 です。小数点以下 28 桁の場合、絶対値の最大値は 7.9228162514264337593543950335 です。10 進型 (Decimal) で表される絶対値の最小値は、0 を除いた場合、0.0000000000000000000000000001 です。

by イグトランス » 2006年12月01日(金) 16:59

^演算子の実体は,basic/function.sbpにあるpow関数ではないでしょうか?
そうだとすれば,Double型で演算されて情報落ちになっているのだと思います。

64bit変数の計算結果がおかしい

by OverTaker » 2006年12月01日(金) 13:34

64bit変数において、次のような計算をすると、なぜか10^16あたりから正しく計算できなくなってしまいます。本来valueには10^16-1が入りますが、なぜかvalueに10^16が入ってしまいます。
ActiveBasic5.0で確認しました。

コード: 全て選択

Dim value As Int64
Dim i As Long
For i = 0 To 18
	value = 10^i-1
	debug
Next

ページトップ