Help us understand the problem. What is going on with this article?

JavaScriptで扱える整数の最大値は?

More than 1 year has passed since last update.

オーバーフローとラップアラウンド

Go言語を勉強しているのですが、Go言語にはオーバーフローが起きた時に、その演算結果をラップアラウンドさせるという仕様があります。

b := byte(255)
b = b + 1 // b ==0

javascriptはどうなっているのか

そこで、javascriptはどうなっているのか気になりました。

一応、言語仕様的には安全に計算できる範囲は9007199254740991のようです。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER

では、64bitの最大値18446744073709551615を扱うとどうなるのか??
以下はchromeのconsoleで試した結果です。
勘違いして18446744073709551616で計算してしまっていますが、結果は変わらなかったのでスルーしてください:poop:

スクリーンショット 2018-07-04 7.28.16.png

スクリーンショット 2018-07-04 9.04.48.png

上記を見る限り、ラップアラウンドはされてないっぽい。


ここまでやって気づいたのですが、JSは符号ありだから最大値は9223372036854775807かも??
以下、結果です。

スクリーンショット 2018-07-04 9.12.42.png

全然関係なく、計算できなかった・・・:raised_hand:

最初に書いた通り、MAXは9007199254740991と思った方が良さそう・・・??:ear:

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away