• ベストアンサー

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

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.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

oz_kas
質問者

お礼

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

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

Doubleは a * 2^nの形で記憶していて、 16^16 = 2^64なので 1.0 * 2^64 と、誤差無くDoubleの保存されています。(おそらく) ただ、そのままMsgBoxで出そうとしたので、デフォルトの文字列変換で 1.84467440737096E+19 と指数表現で表示されているだけです。 ちょっと今確認できる環境が無いのですが、Format関数で#を沢山並べたらどうでしょうか MsgBox Format(Dec_data,"#############################0")

oz_kas
質問者

お礼

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

回答No.1

エクセルの(VBの)表現可能な有効数字範囲を超えているので、既定のデータ型では実現できません。 いわゆる「多倍長計算」が必要になります。(計算処理を自作する必要がある) このURLの「多倍長計算 乗算編 Excelブック(2003/9作成)」が参考になるでしょう。

参考URL:
http://www.tokyo-pax.co.jp/jisaku.htm
oz_kas
質問者

お礼

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

関連するQ&A