Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
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 not register and get more from Qiita?
  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