ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月28日(木) 20:58

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2006年12月01日(金) 13:34 
オフライン

登録日時: 2005年5月31日(火) 17:14
記事: 231
お住まい: 茨城県
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


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年12月01日(金) 16:59 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
^演算子の実体は,basic/function.sbpにあるpow関数ではないでしょうか?
そうだとすれば,Double型で演算されて情報落ちになっているのだと思います。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年12月02日(土) 00:00 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
試しに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 です。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年12月02日(土) 00:09 
オフライン

登録日時: 2005年5月31日(火) 17:14
記事: 231
お住まい: 茨城県
わざわざコードまでありがとうございます。
これを使うかはまだわからないですが、参考にさせていただきます。こちらでもいい方法を模索したいと思います。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年12月07日(木) 23:32 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
今更気付いたのですが,これは単にキャストすれば良かっただけのような気がします。
コード:
Dim value As Int64
Dim i As Long
For i = 0 To 18
    value = (10 ^ i) As Int64 - 1
    debug
Next


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[12人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean