Emil A. - 1 year ago 152

Javascript Question

I'm reading the second chapter of the book Eloquent JavaScript. The author states that:

`Any whole number less than 2^52 (which is more than 10^15) will safely fit in a JavaScript number.`

I grabbed the value of 2^52 from wikipedia.

`4,503,599,627,370,496`

The value has to be less than 2^52, so I've substracted 1 from the initial value;

`var max = 4503599627370495;`

After defining the max variable I'm checking what's the value (I'm using

`Chrome 32.0.1700.77`

`console.log(max); // 4503599627370495`

I'd like to see what happens when I go over this limit, so I'm adding one a couple of times.

Unexpectedly:

`max += 1;`

console.log(max); // 4503599627370496

max += 1;

console.log(max); // 4503599627370497

max += 1;

console.log(max); // 4503599627370498

I went over the limit and the calculations are still precise.

I tried the next power of two instead, 2^53, I didn't substract 1 this time:

`9,007,199,254,740,992`

`var max = 9007199254740992;`

This one seems to be a bigger limit, it seems that I can quite safely add and substract numbers:

`max += 1;`

console.log(max); // 9007199254740992

max += 1;

console.log(max); // 9007199254740992

max -= 1;

console.log(max); // 9007199254740991

max += 1;

console.log(max); // 9007199254740992

max -= 900;

console.log(max); // 9007199254740092

max += 900;

console.log(max); // 9007199254740992

I can assign even a bigger value to the max, however it loses precision and I can't safely add or substract numbers again.

Answer Source

This is not a strongly typed programming language. JS has an object `Number`

. You can even get an infinite number: `document.write(Math.exp(1000));`

.

```
document.write(Number.MIN_VALUE + "<br>");
document.write(Number.MAX_VALUE + "<br>");
document.write(Number.POSITIVE_INFINITY + "<br>");
document.write(Number.NEGATIVE_INFINITY + "<br>");
alert([
Number.MAX_VALUE/(1e293),
Number.MAX_VALUE/(1e292),
Number.MAX_VALUE/(1e291),
Number.MAX_VALUE/(1e290),
].join('\n'))
```

Hope it's a useful answer. Thanks!

**UPDATE:**
max int is - +/- 9007199254740992