2^60 is a perfect double and it is 19 digits.
The double mantissa is 52 bits. So 2^60 will have an exponent, and the compiler can't know the missing digits after 52 are 0.
The internal str (strtofloat like) procedure probably rounds the remainder after 15 digits or so, because that is all that it is sure about.
The point is the number can be altered in two places, in the literal->double and from double->string.