こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBAで16の16乗を正確にさせるには?

エクセルVBAにて16の16乗を取り扱いたいのですが....
データ型が、LongとCurrencyでは、オーバーフローしてしまいます。
そこで、SingleとDuobleですると
  Singelでは、1.844674E+19
  Doubleでは、1.84467440737096E+19
になります。
これを、正確に18446744073709551616とさせる方法を教示ください。

Dim Dec_data As Double

Dec_data = 16 ^ 16

MsgBox Dec_data

投稿日時 - 2013-02-21 10:42:37

QNo.7956559

困ってます

質問者が選んだベストアンサー

10進型なら28桁までいけるので如何でしょうか。
Dim Dec_data
dt1 = 16
Dec_data = dt1
caret = 16
For i = 2 To caret
Dec_data = CDec(Dec_data) * dt1
Next
MsgBox Dec_data

投稿日時 - 2013-02-21 13:10:14

お礼

ありがとうございます。
結果、良好でした。

投稿日時 - 2013-02-21 15:35:51

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

Doubleは a * 2^nの形で記憶していて、 16^16 = 2^64なので
1.0 * 2^64
と、誤差無くDoubleの保存されています。(おそらく)

ただ、そのままMsgBoxで出そうとしたので、デフォルトの文字列変換で 1.84467440737096E+19 と指数表現で表示されているだけです。

ちょっと今確認できる環境が無いのですが、Format関数で#を沢山並べたらどうでしょうか
MsgBox Format(Dec_data,"#############################0")

投稿日時 - 2013-02-21 12:25:35

お礼

ありがとうございます。
結果は、丸められて18446744073709560000でした。

投稿日時 - 2013-02-21 15:34:26

ANo.1

エクセルの(VBの)表現可能な有効数字範囲を超えているので、既定のデータ型では実現できません。
いわゆる「多倍長計算」が必要になります。(計算処理を自作する必要がある)


このURLの「多倍長計算 乗算編 Excelブック(2003/9作成)」が参考になるでしょう。

参考URL:http://www.tokyo-pax.co.jp/jisaku.htm

投稿日時 - 2013-02-21 12:05:42

お礼

ありがとうございます。
今後のこともありますんで「多倍長計算」勉強してみます

投稿日時 - 2013-02-21 15:35:10

あなたにオススメの質問