JavaScriptで精度を失わずに扱える最大の整数値はいくつ?
結論:±9,007,199,254,740,991
JavaScriptのNumber型で精度を失うことなく安全に扱える最大の整数値は、9,007,199,254,740,991(2の53乗から1を引いた値)です。負の方向についても同様に、-9,007,199,254,740,991 までが安全な範囲となります。
ES6仕様における定義
ES6(ECMAScript 2015)の仕様では、絶対値が2の53乗以下であるすべての正負の整数は、Number型で正確に表現できると定められています。なお、整数の0には +0 と -0 という2つの表現が存在する点も特徴的です。
この「安全な整数」の上限値は、ES6では Number.MAX_SAFE_INTEGER という定数として定義されており、コード内で直接参照できます。また、ある数値が安全な範囲内かどうかを判定する Number.isSafeInteger() メソッドも用意されています。
注意点:ビット演算では32ビット制限が適用される
ただし、ビット演算子やシフト演算子は32ビット整数に対して動作するという仕様になっています。そのため、これらの演算子を使用する場合に安全に扱える整数の最大値は 2の31乗から1を引いた値、すなわち 2,147,483,647 となります。ビット演算を伴う処理では、この上限を超えないよう注意が必要です。
より大きな整数を扱いたい場合
2の53乗を超える巨大な整数を正確に計算する必要がある場合は、ES2020で導入された BigInt 型を利用するのが有効です。BigIntを使えば、任意の大きさの整数を精度を損なうことなく扱うことができます。
-
JavaScriptで配列内の数値の組み合わせから目標値になる合計をすべて見つける方法
はじめに本記事では、数値の配列と目標となる合計値を受け取り、その合計値を作り出せる数値の組み合わせをすべて見つけるJavaScript関数の作成方法を解説します。要件作成する関数は、以下のように動作する必要があります。第1引数として数値の配列を受け取る第2引数として単一の数値(目標合計値)を受け取る配列から要素を選び、それらを加算したときに第2引数で指定された合計になる組み合わせを探す条件を満たすすべての部分配列を含む配列を返すなお、要素の順序は問わず、必要であれば同じ数値を複数回使用することも許容されます。入力例たとえば、入力の配列と合計値が次のような場合を考えてみましょう。const ar
-
JavaScriptで文字列から構築できる回文(パリンドローム)の数を数える方法
本記事では、文字列と数値を引数として受け取り、その文字列に含まれる文字を使って構築できる「指定した長さの回文」の総数を求めるJavaScript関数の実装方法を解説します。 問題の概要 第一引数に文字列(str)、第二引数に数値(num)を受け取るJavaScript関数を作成します。この関数は、与えられた文字列strの文字を組み合わせて、ちょうどnum文字となる回文が何通り作れるかを数え、その個数を返す必要があります。 たとえば、入力が以下の場合を考えてみましょう。 const str = ij;const num = 4; このとき、期待される出力は次のとおりです。 const outpu