9223372036854665200d
является константой типа double
. Однако 9223372036854665200
не подходит для double
без потери точности. A double
имеет только 52 бита мантиссы, в то время как для рассматриваемого числа требуется 63 бита для точного представления.
Ближайшим double
к 9223372036854665200d
является число, чья мантисса равна 1.1111111111111111111111111111111111111111111110010100
в двоичном, а показатель степени равен 63 (десятичный). Этот номер является не чем иным, как 9223372036854665216
(назовите его U
).
Если мы уменьшим мантиссу на одну ступень до 1.1...0011
, мы получим 9223372036854664192
(назовите это L
).
Исходное число находится между L
и U
и намного ближе к U
, чем L
Наконец, если вы думаете, что это усечение мантиссы должно привести к числу, оканчивающемуся на кучу нулей, вы правы. Только это происходит в двоичном, а не в десятичном виде: U
в base-16 равно 0x7ffffffffffe5000
и L
равно 0x7ffffffffffe4c00
.