log(2)/log(10) ≒ 0.301
google:log(2) / log(10) ≒ 0.3 (もっというなら0.301)というのを覚えておくと2^Nが10進数で何桁まで溢れずに計算できるか計算するのに便利。
- 2^8
- 8 * 0.3 ≒ 2 (2^8 = 256)
- 2^10
- 10 * 0.3 = 3 (2^10 = 1024)
- 2^32
- 32 * 0.3 ≒ 9 (2^32 = 4.x * 10^9)
- 2^64
- 64 * 0.3 ≒ 19 (2^64 = 1.8 * 10^19)
- 2^128
- 128 * 0.3 ≒ 38 (2^128 = 3.4 * 10^38)
要するにC#だとuintで9桁まで桁溢れ無しの計算ができて、ulongだと19桁まで桁溢れ無しの計算ができるということです。
まあ、MAX限界でギリギリ金融計算する場合はこれじゃあ危険ですが。(和算などでオーバーフローすることも考えなくてはいけない。)
Javaなら素直にBigIntegerなどを使うべきです。
概算といえば、2^10 ≒ 1000 もよく使いますね。