0

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?

Parth Mall
  • 33
  • 1
  • 5

1 Answers1

3

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.

gustafc
  • 28,465
  • 7
  • 73
  • 99