大変よくできたネタだったのに,投稿主さんが消してしまったので,再現しておく。
Python では,整数は自動的に長精度になるので,もしかしたら正しいのかなと眉に唾して読んだ。
ans = 545783032743912028389476341548725567488.0
print(ans) # 5.45783032743912e+38 完全な桁を書きたい
intAns = int(ans) # こうすればいい
print(intAns) # 545783032743912028389476341548725567488
そんなことないだろうと,調べてみた。
545783032743912028389476341548725567488 はかなり特殊な数,
hex(545783032743912028389476341548725567488)
= '0x19a99fd143bee50000000000000000000' のように下位桁が0で,0x19a99fd143bee5 = 7223378293538533 は16桁で64ビット実数でかろうじて表せる整数。
ans の先頭 15 桁とその後に 0,最後に 1 でも,このようなことは成り立たないことがわかる。
ans1 = 545783032743912000000000000000000000001.0
print(ans1) # 5.45783032743912e+38
intAns1 = int(ans1)
print(intAns1) # 545783032743912028389476341548725567488
Julia なら,BigInt, BigFloat, big"数値を表す文字列" を使う。
b = 545783032743912000000000000000000000001.0
print(b) # 5.45783032743912e38
print(BigInt(b)) # 545783032743912028389476341548725567488
b = big"545783032743912000000000000000000000001.0" # 文字列で与える
print(b) # 5.45783032743912000000000000000000000001e+38
print(BigInt(b)) # 545783032743912000000000000000000000001