最終更新日:
公開日:
レシピ
数値
JavaScriptで数学の計算を実行する
Mathオブジェクトを使って数学の各種計算を実行する方法について解説します。
目次
JavaScriptで各種計算を実行する
JavaScriptは四則演算の他に、Mathオブジェクトを使った計算を実行することができます。
このオブジェクトはコンストラクタがないため、以下のようにプロパティやメソッドを直接呼び出して使用します。
JavaScript コード例
// ラジアンを計算
let radian = angle * Math.PI / 180;
// 座標x、yを計算
let coordinate_y = r * Math.sin(radian);
let coordinate_x = r * Math.cos(radian);
Mathオブジェクトには以下のプロパティとメソッドが用意されています。
プロパティ
プロパティ名 | 値 |
---|---|
Math.E | 自然対数の底(e)「2.718281828459045」 |
Math.LN10 | 10の自然対数「2.302585092994046」 |
Math.LN2 | 2の自然対数「0.6931471805599453」 |
Math.LOG10E | 10を底としたeの対数「0.4342944819032518」 |
Math.LOG2E | 2を底としたeの対数「1.4426950408889634」 |
Math.PI | 円周率「3.141592653589793」 |
Math.SQRT1_2 | 1/2の平方根「0.7071067811865476」 |
Math.SQRT2 | 2の平方根「1.4142135623730951」 |
メソッド
メソッド名 | 実行内容 |
---|---|
Math.absメソッド | パラメータに渡した数値の絶対値を取得 |
Math.acosメソッド | パラメータに渡した数値のアークコサイン(ラジアン)を計算する |
Math.acoshメソッド | パラメータに渡した数値のハイパーボリックアークコサインを計算する |
Math.asinメソッド | パラメータに渡した数値のアークサイン(ラジアン)を計算する |
Math.asinhメソッド | パラメータに渡した数値のハイパーボリックアークサインを計算する |
Math.atanメソッド | パラメータに渡した角度のアークタンジェントを表す数値(ラジアン)を計算する |
Math.atan2メソッド | Math.atan2(y,x)に対して、点(0,0)から点(x,y)までの半直線と、X軸の正の平面(x,0)の角度を計算する |
Math.atanhメソッド | パラメータに渡した数値のハイパーボリックアークタンジェントを計算する |
Math.cbrtメソッド | パラメータに渡した数値の立方根を計算する |
Math.ceilメソッド | パラメータに渡した数値の小数点以下を切り上げした数値を取得する |
Math.clz32メソッド | パラメータに渡した数値の32ビットバイナリ表現における先頭からの「0」の数を取得する |
Math.cosメソッド | パラメータに渡した数値のコサイン(余弦)を計算する |
Math.coshメソッド | パラメータに渡した数値のハイパーボリックコサインを計算する |
Math.expメソッド | 自然対数の底であるネイピア数(オイラー数)に対して、パラメータで渡した数値で累乗した値を取得する |
Math.expm1メソッド | 自然対数の底であるネイピア数(オイラー数)に対して、パラメータで渡した数値で累乗した後に「-1」した値を取得する |
Math.floorメソッド | パラメータに渡した数値の小数点以下を切り捨てした数値を取得する |
Math.froundメソッド | パラメータに渡した数値に最も近い浮動少数点数を取得する |
Math.hypotメソッド | パラメータに渡した数値の2乗和の平方根を計算する。パラメータには任意の数の数値を指定できる |
Math.imulメソッド | パラメータに渡した2つの数値の32ビット乗算を実行する |
Math.logメソッド | パラメータに渡した数値の自然対数(log)を計算する |
Math.log10メソッド | パラメータに渡した数値について、10を底とする対数を計算する |
Math.log1pメソッド | パラメータに渡した数値に1を加えた数値の自然対数(log)を計算する |
Math.log2メソッド | パラメータに渡した数値について、2を底とする対数を計算する |
Math.maxメソッド | パラメータに渡した数値の中から最大値を取得する。パラメータは任意の数だけ指定できるが配列(Array)は不可。 |
Math.minメソッド | パラメータに渡した数値の中から最小値を取得する。パラメータは任意の数だけ指定できるが配列(Array)は不可。 |
Math.powメソッド | パラメータに渡した数値の累乗を計算する。第1パラメータに数値、第2パラメータに累乗回数の数値を指定する。 |
Math.randomメソッド | 0以上〜1未満の範囲で浮動小数点数の乱数を取得する |
Math.roundメソッド | パラメータに渡した数値の小数点以下を四捨五入した数値を取得する |
Math.signメソッド | パラメータに渡した数値が「正」か「負」を判定する |
Math.sinメソッド | パラメータに渡した数値のサイン(正弦)を計算する |
Math.sinhメソッド | パラメータに渡した数値のハイパーボリックサインを計算する |
Math.sqrtメソッド | パラメータに渡した数値の平方根を計算する |
Math.tanメソッド | パラメータに渡した角度のタンジェントを表す数値(ラジアン)を計算する |
Math.tanhメソッド | パラメータに渡した数値のハイパーボリックタンジェントを計算する |
Math.truncメソッド | 小数点以下を取り除いて整数にする |
以降はMathオブジェクトのプロパティとメソッドを使った計算例を解説していきます。
絶対値を取得
数値の絶対値を取得するときはMath.absメソッドを使います。
数値から符号を取った値を取得します。
パラメータに文字列(String)の数字を渡した場合も、数値に変換して絶対値を取得することができます。
JavaScript コード例
console.log(Math.abs(-100)); // 100
console.log(Math.abs(5)); // 5
console.log(Math.abs(-0.001)); // 0.001
console.log(Math.abs('-8')); // 8
累乗を計算
数値の累乗を計算するときはMath.powメソッドを使います。
第1パラメータに数値、第2パラメータに累乗する回数を指定します。
JavaScript コード例
console.log(Math.pow(10,3)); // 1000 (10 * 10 * 10)
console.log(Math.pow(5,4)); // 625 (5 * 5 * 5 * 5)
console.log(Math.pow(-2,5)); // -32 (-2 * -2 * -2 * -2 * -2)
console.log(Math.pow(2,-2)); // 0.03125 (1 / 4)
数値符号を取得
数値の「正」「負」の符号を取得するときはMath.signメソッドを使います。
パラメータに渡した数値が「正」であれば1、「負」であれば-1、数値が「0」のときは0を返します。
また、数字の文字列(String)を渡したときは、数値に変換して符号を返します。
JavaScript コード例
console.log(Math.sign(1)); // 1
console.log(Math.sign(0)); // 0
console.log(Math.sign(-1)); // -1
console.log(Math.sign(40.5)); // 1
console.log(Math.sign(-2.5)); // -1
console.log(Math.sign('5')); // 1
四捨五入、切り捨て、切り上げ
数値の小数点以下を四捨五入するときは、必要に応じて以下の4種類のメソッドを使用することができます。
- Math.round – 小数点以下を四捨五入
- Math.floor – 小数点以下を切り捨てる
- Math.ceil – 小数点以下を切り上げる
- Math.trunc – 正の数値の場合は小数点以下を切り捨てて、負の値の場合は切り上げる
以下の例は浮動小数点数を持つ変数number1〜number5に対して、それぞれのメソッドを実行して得られた値をconsole.logメソッドで出力します。
JavaScript コード例
let number1 = 1.25;
let number2 = 1.75;
let number3 = -1.25;
let number4 = -1.75;
let number5 = '5.75';
// 四捨五入
console.log(Math.round(number1)); // 1
console.log(Math.round(number2)); // 2
console.log(Math.round(number3)); // -1
console.log(Math.round(number4)); // -2
console.log(Math.round(number5)); // 6
// 切り捨て
console.log(Math.floor(number1)); // 1
console.log(Math.floor(number2)); // 1
console.log(Math.floor(number3)); // -2
console.log(Math.floor(number4)); // -2
console.log(Math.floor(number5)); // 5
// 切り上げ
console.log(Math.ceil(number1)); // 2
console.log(Math.ceil(number2)); // 2
console.log(Math.ceil(number3)); // -1
console.log(Math.ceil(number4)); // -1
console.log(Math.ceil(number5)); // 6
// 小数点以下を取り除いて整数にする
console.log(Math.trunc(number1)); // 1
console.log(Math.trunc(number2)); // 1
console.log(Math.trunc(number3)); // -1
console.log(Math.trunc(number4)); // -1
console.log(Math.trunc(number5)); // 5
小数点以下の指定した桁数を残す場合の計算方法については、別記事「四捨五入、切り捨て、切り上げ」を参照してください。
指定した数値に最も近い単精度の浮動少数点数を取得
Math.froundメソッドを使うと、パラメータに渡した数値に近い単精度の浮動小数点数を取得することができます。
文字列の数字を渡すと、数値(Number)に変換した戻り値が得られます。
JavaScript コード例
console.log(Math.fround(1)); // 1
console.log(Math.fround(0)); // 0
console.log(Math.fround(5.2219)); // 5.22189998626709
console.log(Math.fround(NaN)); // NaN
console.log(Math.fround(Infinity)); // Infinity
console.log(Math.fround(-0.00215)); // -0.00215000007301569
console.log(Math.fround('3.14')); // 3.140000104904175
ランダムな数値(乱数)を取得
ランダムな数値が必要なときはMath.randomメソッドを実行すると得ることができます。
このメソッドは0以上〜1未満の浮動小数点数を返します。
以下の例はfor文を使ってMath.randomメソッドを10回実行し、取得した乱数を出力します。
JavaScript コード例
for(let i=0; i<10; i++) {
console.log(Math.random());
}
// 1:0.34413499586008345
// 2:0.5958244731234994
// 3:0.5217054211840673
// 4:0.4127891606859544
// 5:0.5956624096139826
// 6:0.9279884231528324
// 7:0.5806970453218685
// 8:0.8350118012081118
// 9:0.5224963150279476
// 10:0.8610373197259229
整数で0〜9の範囲で乱数を取得するときは、以下のように取得した乱数に10を掛けて、さらに小数点以下をMath.floorメソッドで切り捨てます。
JavaScript コード例
for(let i=0; i<10; i++) {
let random_value = Math.floor(Math.random() * 10);
console.log(random_value);
}
// 1:3
// 2:0
// 3:0
// 4:8
// 5:0
// 6:2
// 7:5
// 8:6
// 9:0
// 10:5
乱数の範囲を指定するときは、Math.randomメソッドで取得した乱数に対して、範囲の最大値と最小値を使った計算を実行します。
以下の例では乱数の最小値を変数minに、最大値を変数maxに指定して、2つの数値の範囲から乱数を取得します。
JavaScript コード例
let min = 21;
let max = 28;
for(let i=0; i<10; i++) {
let random_value = Math.floor(Math.random() * ((max + 1) - min) + min);
console.log(random_value);
}
// 1:26
// 2:22
// 3:21
// 4:25
// 5:21
// 6:28
// 7:23
// 8:25
// 9:22
// 10:23
計算内容について詳しくは別記事「ランダムな数値を取得する」を参照してください。
最大値と最小値を取得
パラメータで渡した複数の数値から最大値を取得するときはMath.maxメソッド、最小値を取得するときはMath.minメソッドを使います。
パラメータには任意の数だけ数値を渡すことができます。
JavaScript コード例
console.log(Math.max(2, 0.5, 8, -1, 4)); // 8
console.log(Math.min(2, 0.5, 8, -1, 4)); // -1
配列に入っている値から最大値、最小値を取得するときは分割代入「…」を使うことができます。
以下の例では配列が入った変数number_arrayから、それぞれ最大値と最小値の要素を取り出して値を出力します。
JavaScript コード例
let number_array = [ 19, 52, 30, 42, 72, 53];
console.log(Math.max(...number_array)); // 72
console.log(Math.min(...number_array)); // 19
平方根を計算
数値の平方根を計算するときはMath.sqrtメソッドを使います。
JavaScript コード例
console.log(Math.sqrt(4)); // 2
console.log(Math.sqrt(100)); // 10
console.log(Math.sqrt(0)); // 0
console.log(Math.sqrt(-4)); // NaN
console.log(Math.sqrt(19)); // 4.358898943540674
2乗和の平方根を計算
数値の2乗和の平方根を計算するときはMath.hypotメソッドを使います。
パラメータに渡す数値は必要な数だけ指定することができます。
JavaScript コード例
console.log(Math.hypot()); // 0
console.log(Math.hypot(4)); // 4
console.log(Math.hypot(1, 2)); // 2.23606797749979
console.log(Math.hypot(3, 4)); // 5
console.log(Math.hypot(1,2,3,4)); // 5.477225575051661
console.log(Math.hypot(0,100)); // 100
console.log(Math.hypot(10,100)); // 100.4987562112089
例えば、「Math.hypot(1, 2)」を実行すると、第1パラメータの「1」の2乗した値「1」と、第2パラメータの「2」を2乗した値「4」の和である「5」の平方根を計算します。
これは、「Math.sqrt(5)」を実行した結果と同じ値になります。
もしパラメータに渡した値が1つの場合は、絶対値を求めるMath.absメソッドを実行したときと同じ値が得られます。
立方根を計算
数値の立方根を計算するときはMath.cbrtメソッドを使います。
JavaScript コード例
console.log(Math.cbrt(1)); // 1
console.log(Math.cbrt(64)); // 4
console.log(Math.cbrt(216)); // 6
自然対数(log)を計算
自然対数を計算するときはMath.logメソッドを使います。
その他、パラメータに1を加えた数値の自然対数を求めるMath.log1pメソッド、10を底とする対数を計算するMath.log10メソッド、2を底とする対数を計算するMath.log2メソッドを使うことができます。
JavaScript コード例
// 自然対数(log)を計算
console.log(Math.log(1)); // 0
console.log(Math.log(0)); // -Infinity
console.log(Math.log(-1)); // NaN
console.log(Math.log(100)); // 4.605170185988092
// 1を加えた数値の自然対数を計算
console.log(Math.log1p(1)); // 0.6931471805599453
console.log(Math.log1p(0)); // 0
console.log(Math.log1p(-1)); // -Infinity
console.log(Math.log1p(99)); // 4.605170185988092
// 10を底とする対数を計算
console.log(Math.log10(1)); // 0
console.log(Math.log10(1000)); // 3
console.log(Math.log10(0.01)); // -2
// 2を底とする対数を計算
console.log(Math.log2(2)); // 1
console.log(Math.log2(8)); // 3
console.log(Math.log2(256)); // 8
指数関数を計算
Math.expメソッドを使うと、自然対数の底であるネイピア数(オイラー数)のx乗の数値を計算することができます。
xはパラメータで数値で渡します。
また、Math.expm1メソッドを使うと上記の計算した数値から「-1」した値を得ることができます。
JavaScript コード例
console.log(Math.exp(0)); // 1
console.log(Math.exp(1)); // 2.718281828459045
console.log(Math.exp(2)); // 7.38905609893065
console.log(Math.exp(4)); // 54.598150033144236
// Math.exp(x)-1 を計算
console.log(Math.expm1(0)); // 0
console.log(Math.expm1(1)); // 1.718281828459045
console.log(Math.expm1(2)); // 6.38905609893065
console.log(Math.expm1(4)); // 53.598150033144236
三角関数(sin、cos、tan)に関する計算
三角関数に関する計算をするときはMath.sinメソッド、Math.cosメソッド、Math.tanメソッドを使うことができます。
以下の例では円の周囲上にある点のX座標(Math.cosメソッド)、Y座標(Math.sinメソッド)、タンジェントを表す数値(Math.tanメソッド)を計算します。
その後に計算したX座標とY座標を使って、点(0,0)から点(x,y)までの半直線と、X軸の正の平面(x,0)の角度をMath.atan2メソッドで計算します。
JavaScript コード例
// 辺の長さ
let r = 100;
// 角度
let angle = 50;
// ラジアン
let radian = angle * Math.PI / 180;
// 点のX座標、Y座標、タンジェントの数値(ラジアン)を計算
let coordinate_y = r * Math.sin(radian);
let coordinate_x = r * Math.cos(radian);
let tan = Math.tan(radian);
// 点(0,0)から点(x,y)までの半直線と、X軸の正の平面(x,0)の角度を計算
let angle_a = Math.atan2( coordinate_y, coordinate_x) * 180 / Math.PI;
console.log(coordinate_y); // 76.60444431189781
console.log(coordinate_x); // 64.27876096865394
console.log(tan); // 1.19175359259421
console.log(angle_a); // 49.99999999999999
逆三角関数(Arcsin、Arccos、Arctan)に関する計算
逆三角関数に関する計算では、Arcsin(アークサイン)を計算するMath.asinメソッド、Arccos(アークコサイン)を計算するMath.acosメソッド、Arctan(アークタンジェント)を計算するMath.atanメソッドを使うことができます。
JavaScript コード例
// Arcsin(アークサイン)
console.log(Math.asin(1.1)); // NaN
console.log(Math.asin(1)); // 1.5707963267948966
console.log(Math.asin(0.5)); // 0.5235987755982989
console.log(Math.asin(0)); // 0
console.log(Math.asin(-0.5)); // -0.5235987755982989
console.log(Math.asin(-1)); // -1.5707963267948966
console.log(Math.asin(-1.1)); // NaN
// Arccos(アークコサイン)
console.log(Math.acos(1.1)); // NaN
console.log(Math.acos(1)); // 0
console.log(Math.acos(0.5)); // 1.0471975511965979
console.log(Math.acos(0)); // 1.5707963267948966
console.log(Math.acos(-0.5)); // 2.0943951023931957
console.log(Math.acos(-1)); // 3.141592653589793
console.log(Math.acos(-1.1)); // NaN
// Arctan(アークタンジェント)
console.log(Math.atan(1)); // 0.7853981633974483
console.log(Math.atan(0.5)); // 0.4636476090008061
console.log(Math.atan(0.1)); // 0.09966865249116204
console.log(Math.atan(0)); // 0
console.log(Math.atan(-0.1)); // -0.09966865249116204
console.log(Math.atan(-0.5)); // -0.4636476090008061
console.log(Math.atan(-1)); // -0.7853981633974483
双曲線関数に関する計算
双曲線関数に関する計算では、ハイパーボリック サインを計算するMath.sinhメソッド、ハイパーボリック コサインを計算するMath.coshメソッド、ハイパーボリック タンジェントを計算するMath.tanhメソッドを使うことができます。
JavaScript コード例
// ハイパーボリック サイン
console.log(Math.sinh(10)); // 11013.232874703393
console.log(Math.sinh(5)); // 74.20321057778875
console.log(Math.sinh(1)); // 1.1752011936438014
console.log(Math.sinh(0)); // 0
console.log(Math.sinh(-1)); // -1.1752011936438014
console.log(Math.sinh(-5)); // -74.20321057778875
console.log(Math.sinh(-10)); // -11013.232874703393
// ハイパーボリック コサイン
console.log(Math.cosh(10)); // 11013.232920103324
console.log(Math.cosh(5)); // 74.20994852478785
console.log(Math.cosh(1)); // 1.5430806348152437
console.log(Math.cosh(0)); // 1
console.log(Math.cosh(-1)); // 1.5430806348152437
console.log(Math.cosh(-5)); // 74.20994852478785
console.log(Math.cosh(-10)); // 11013.232920103324
// ハイパーボリック タンジェント
console.log(Math.tanh(10)); // 0.9999999958776927
console.log(Math.tanh(5)); // 0.9999092042625951
console.log(Math.tanh(1)); // 0.7615941559557649
console.log(Math.tanh(0)); // 0
console.log(Math.tanh(-1)); // -0.7615941559557649
console.log(Math.tanh(-5)); // -0.9999092042625951
console.log(Math.tanh(-10)); // -0.9999999958776927
双曲線の逆関数に関する計算
双曲線の逆関数に関する計算では、ハイパーボリック アークサインを計算するMath.asinhメソッド、ハイパーボリック アークコサインを計算するMath.acoshメソッド、ハイパーボリック アークタンジェントを計算するMath.atanhメソッドを使うことができます。
JavaScript コード例
// ハイパーボリック アークサイン
console.log(Math.asinh(10)); // 2.99822295029797
console.log(Math.asinh(5)); // 2.3124383412727525
console.log(Math.asinh(1)); // 0.881373587019543
console.log(Math.asinh(0)); // 0
console.log(Math.asinh(-1)); // -0.881373587019543
console.log(Math.asinh(-5)); // -2.3124383412727525
console.log(Math.asinh(-10)); // -2.99822295029797
// ハイパーボリック アークコサイン
console.log(Math.acosh(10)); // 2.993222846126381
console.log(Math.acosh(5)); // 2.2924316695611777
console.log(Math.acosh(1)); // 0
console.log(Math.acosh(0)); // NaN
// ハイパーボリック アークタンジェント
console.log(Math.atanh(1.1)); // NaN
console.log(Math.atanh(1)); // Infinity
console.log(Math.atanh(0.9)); // 1.4722194895832204
console.log(Math.atanh(0.5)); // 0.5493061443340548
console.log(Math.atanh(0)); // 0
console.log(Math.atanh(-0.5)); // -0.5493061443340548
console.log(Math.atanh(-0.9)); // -1.4722194895832204
console.log(Math.atanh(-1)); // -Infinity
console.log(Math.atanh(-5)); // NaN
32ビットバイナリ数値の先頭から続く「0」の数を計算
Math.clz32メソッドを使うと、パラメータで渡した数値の32ビットバイナリ数値において、先頭(左端)から数値までの間にある「0」の数を取得することができます。
JavaScript コード例
console.log(Math.clz32(0)); // 32
console.log(Math.clz32(-1)); // 0
console.log(Math.clz32(2)); // 30
console.log(Math.clz32(1000000)); // 12
console.log(Math.clz32(123456789)); // 5
32ビット高速乗算を実行
Math.imulメソッドを使うと、パラメータで渡す2つの数値(整数)に対して高速乗算を実行します。
もしパラメータに浮動小数点数を渡した場合は、小数点以下を切り捨てた整数に変換して乗算を実行します。
JavaScript コード例
console.log(Math.imul(1,5)); // 5
console.log(Math.imul(2,4)); // 8
console.log(Math.imul(10,100)); // 1000
console.log(Math.imul(0xfff,1)); // 4095
console.log(Math.imul( 1.999, 7.999)); // 7