6

The following code

console.log(Math.pow(2, 53)); 
console.log(Math.pow(2, 53) + 1);

produces exactly same output for both calculations:

9007199254740992

Why?

1

2 Answers 2

11

The result you see occurs because Math.Pow() is working with floating point numbers, and when you reach the 16th decimal digit, you can't necessarily add one to the least significant decimal digit of the value and expect the result to change.

There are typically, in a 64-bit (8-byte) IEEE 754 floating-point binary value, 53 bits for the mantissa (including the implied 1-bit). Your calculation Math.Pow(2, 53) requires 54 bits in the mantissa to be guaranteed of a change. If you add 2, you should see the change.

Sign up to request clarification or add additional context in comments.

Comments

-3

All Javascript numbers are double.

1 Comment

No. All numbers in JavaScript are 64-bit floating point numbers.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.