プロが教えるわが家の防犯対策術!

エクセル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

A 回答 (3件)

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/02/21 15:35

Doubleは a * 2^nの形で記憶していて、 16^16 = 2^64なので


1.0 * 2^64
と、誤差無くDoubleの保存されています。(おそらく)

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

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

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

お礼日時:2013/02/21 15:34

エクセルの(VBの)表現可能な有効数字範囲を超えているので、既定のデータ型では実現できません。


いわゆる「多倍長計算」が必要になります。(計算処理を自作する必要がある)


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

参考URL:http://www.tokyo-pax.co.jp/jisaku.htm
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/02/21 15:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!