The output of the following:
let x = 10**23;
console.log(x.toString(16))
comes out 152d02c7e14af6000000
which actually computes to 99999999999999991611392
and not 10**23
. Interestingly enough, the following doesn't compute to false
:
let x = 10**23;
console.log(x==parseInt(x.toString(16),16))
Am I getting something wrong here?
JavaScript numbers are floating point, which lose precision the larger they get. When you exceed Number.MAX_SAFE_INTEGER
(which is 253 – 1), the precision becomes >1.
This also means that things like 10**23 === (1**23 - 123)
evaluates to true
.