JavaScript の数値を処理しているときに、次の奇妙な動作を見つけました。
var baseNum = Math.pow(2, 53);
console.log(baseNum); //prints 9007199254740992
console.log(baseNum + 1); //prints 9007199254740992 again!
console.log(baseNum + 2); //prints 9007199254740994, 2 more than +1
console.log(baseNum + 3) // prints 9007199254740996, 2 more than +2
console.log(baseNum + 4) // prints 9007199254740996, same as +3
ここで何が起きてるの?JavaScript は最大までの数値しか表現できないことは理解していますが2^53
(内部的に「double」になっていますか?)、なぜこのような動作をするのでしょうか?
が実際の最大値である場合2^53
、なぜNumber.MAX_VALUE
( 1.7976931348623157e+308
) があるのですか?