オーバーフローとラップアラウンド
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で計算してしまっていますが、結果は変わらなかったのでスルーしてください
上記を見る限り、ラップアラウンドはされてないっぽい。
ここまでやって気づいたのですが、JSは符号ありだから最大値は9223372036854775807
かも??
以下、結果です。
全然関係なく、計算できなかった・・・
最初に書いた通り、MAXは9007199254740991
と思った方が良さそう・・・??