最新!JavaScript入門講座ーMathオブジェクトをわかりやすく解説

JavaScript
この記事は約11分で読めます。

JavaSciriptには数学的な計算を可能にするオブジェクトが用意されています。プログラミングは様々なツールを作成できますが、もともとの目的である数学的な計算をするという機能はほぼ全てのプログラミング言語に組み入れられています。

数学的な計算は、数学に関するアプリの制作はもちろん、ゲームを作成するときには必ず使います。今回は、プログラミングをする上でとても大切な数学的な計算を行うMathオブジェクトについて解説していきます。



本記事のペルソナ
  • Mathオブジェクトについて学びたい方
  • 数学的な計算を行いたい方
  • 数学の計算を学びたい方
  • 数学についての基礎知識を持っている方
  • JavaScript初学者の方

Mathオブジェクトの解説

乱数を生成する(Math.random)

乱数を生成するメソッドがあります。乱数を生成するのは様々な場面で使うことがあります。

let num = 5;
for(let i = 0;i < num;i++){
    console.log(Math.random());
}
$node math.js

0.7509155577063593
0.5840049297776835
0.24755459040681016
0.44615338412707817
0.871398278736627

まずは、シンプルなメソッドの使い方です。これは0〜1の範囲でランダムに数が生成されて返されます。この場合は少数になります。

let n = 9;
let array = ["AGG","GLD","HDV","IVV","QQQ","SPY","VOO","VWO","VTI","VYM"];
for(let i=0; i<5;i++){
    let ran = Math.floor(Math.random()*n);
    console.log(array[ran]);
}
$node math.js

QQQ
AGG
SPY
QQQ
VOO

少数ではなく、整数の乱数を生成する方法もあります。
このサンプルのようにすることで、整数の乱数を生成することが可能です。この場合、0から9までの乱数が生成されます。

最小値・最大値

console.log(`maximum : ${Math.max(4019,442,981,45,22,556,1245,76,234,555,1000,20000000)}`);
console.log(`minimum : ${Math.min(4019,442,981,45,22,556,1245,76,234,555,1000,20000000)}`);

数字を扱うとき、必ず最小値・最大値があります。それらを自動的に求めてくれるメソッドも存在します。

$node math.js

maximum : 20000000
minimum : 22

Mathオブジェクトの最大値・最小値をもとめるメソッドでは受け取った引数から最大値・最小値をもとめます。

let numbers = [144.31,442,192.73,45,22,666,2245,76,234,555,1000,480000.63];
const max = numbers.reduce((x,y)=>{
    return Math.max(x,y);
});
const min = numbers.reduce((x,y)=>{
    return Math.min(x,y);
});

console.log(`maximum : ${max}`);
console.log(`minimum : ${min}`);
$node math.js

maximum : 480000.63
minimum : 22

少々複雑になってしまいますが、reduceを使うと配列内の最大値・最小値を求めることが可能です。

累乗計算(Math.pow)

続いては指数計算になります。n乗計算を行ってくれるメソッドが存在します。底と指数を指定することで指数計算を行います。

console.log(Math.pow(4,2));
console.log(Math.pow(4,1/3));
console.log(Math.pow(3,50));
console.log(Math.pow(8,-3));


for(let i = 0;i <= 10;i++){
    console.log(Math.pow(2,i));
}
$node math.js

16 //4^2
1.5874010519681994 //4^1/3
7.178979876918526e+23 //3^50
0.001953125 // 8^-3
1
2
4
8
16
32
64
128
256
512
1024

この内容は完全に中学数学の範囲になります。なので、数学の知識が必要になってきます。もし、中学数学の内容に自信がないよ、という方はこの機会に学び直してみましょう。
また、繰り返しで表示させている2の1乗から2の10乗を表しています。ITにおいて、2の指数計算は超重要なので覚えておきましょう。

平方・立方計算(Math.sqrt,Math.cbrt)

続いては、平方根、立方根になります。引数として受け取った数の平方値、立方値を計算します。

console.log(Math.sqrt(100));
console.log(Math.sqrt(169));
console.log(Math.sqrt(13));
console.log(Math.sqrt(16));
console.log(Math.sqrt(72));


for(let i = 1;i <= 10;i++){
    console.log(`√${i} = ${Math.sqrt(i)}`);
}
$node math.js

10
13
3.605551275463989
4
8.48528137423857
√1 = 1
√2 = 1.4142135623730951
√3 = 1.7320508075688772
√4 = 2
√5 = 2.23606797749979
√6 = 2.449489742783178
√7 = 2.6457513110645907
√8 = 2.8284271247461903
√9 = 3
√10 = 3.1622776601683795

平方根が懐かしいかた、もしくは今まさに勉強しているという方もいるのではないでしょうか。このあたりの数は理系の方でしたら暗記しているかもしれませんね。

続いては立方根です。
平方根は見慣れていても、立方根は見慣れないという方もいるかもしれません。立方根は3乗したらその値になる値です。

立方根

a = b^3

3√a = b

このような式が成り立ちます。平方根の場合は3ではなく2になります。
この立方根を行う計算をするメソッドを見ていきましょう。

console.log(Math.cbrt(1000));
console.log(Math.cbrt(169));
console.log(Math.cbrt(27));
console.log(Math.cbrt(16));
console.log(Math.cbrt(72));


for(let i = 1;i <= 10;i++){
    console.log(`3√${i} = ${Math.cbrt(i)}`);
}
$node math.js

10
5.528774813678872
3
2.5198420997897464
4.160167646103808
3√1 = 1
3√2 = 1.2599210498948732
3√3 = 1.4422495703074083
3√4 = 1.5874010519681996
3√5 = 1.709975946676697
3√6 = 1.8171205928321397
3√7 = 1.9129311827723892
3√8 = 2
3√9 = 2.080083823051904
3√10 = 2.154434690031884

三角関数(Math.sin,cos,tan)

続いては、好き嫌いがの差が激しい三角関数です。三角関数はプログラミングでもゴリゴリに使う時がありますね。特に、ゲームを作りたい方、数学に関するアプリを作りたい方、必須ですのでしっかりと使い方をマスターしましょう。

三角関数の数学的な解説はここでは省略していきます。もし、三角関数の知識が怪しいなって思う方は教科書やWeb検索などで確認しましょう。

私がおすすめする数学解説サイトです。もし必要ならリンクからどうぞ。

高校数学の美しい物語

console.log(`sin(π/6) = ${Math.sin(Math.sin(Math.PI/6))}`);
console.log(`sin(π/3) = ${Math.sin(Math.sin(Math.PI/3))}`);

console.log(`cos(π/6) = ${Math.cos(Math.cos(Math.PI/12))}`);
console.log(`cos(π/8) = ${Math.cos(Math.cos(Math.PI/8))}`);

console.log(`tan(π/10) = ${Math.tan(Math.tan(Math.PI/10))}`);
console.log(`tan(π/2) = ${Math.tan(Math.tan(Math.PI/2))}`);
$node math.js

sin(π/6) = 0.47942553860420295
sin(π/3) = 0.7617599814162892
cos(π/6) = 0.5686555578844954
cos(π/8) = 0.6027290430100576
tan(π/10) = 0.3368583375875327
tan(π/2) = 3.370587556518889

まずは、基本的な数値から見ていきましょう。
他のプログラミング言語でもそうですが、角度はラジアンを使います。JavaScriptでは円周率を表すMath.PIメソッドがありますのでこちらを使います。

これらを使い、有名な三角関数の公式を再現してみましょう。

let tfunc1 = Math.pow(Math.sin(Math.PI/6),2) + Math.pow(Math.cos(Math.PI/6),2);
let tfunc2 = Math.sin(Math.PI/3) / Math.cos(Math.PI/3);
let tfunc3 = Math.sin(Math.PI/4)*Math.cos(Math.PI/3) + Math.sin(Math.PI/3)*Math.cos(Math.PI/4); 

console.log(`sin(π/6)^2 + cos(π/6)^2 = ${tfunc1}`);
console.log(`sin(π/3) / cos(π/3) = ${tfunc2}`);
console.log(`sin(π/4)cos(π/3) + cos(π/4)sin(π/3) = ${tfunc3}`);
$node math.js

sin(π/6)^2 + cos(π/6)^2 = 1
sin(π/3) / cos(π/3) = 1.7320508075688767
sin(π/4)cos(π/3) + cos(π/4)sin(π/3) = 0.9659258262890684

はい、有名な三角関数の公式ともいえる式たちを表してみました。
このあたりは使えるようになっておいても損はないでしょう。

また、他にも三角関数に関するメソッドはあります。それが下記になります。

三角関数
  • アークサイン(asin)
  • アークコサイン(acos)
  • アークタンジェント(atan)
  • ハイパボリックサイン(sinh)
  • ハイパボリックコサイン(cosh)
  • ハイパボリックタンジェント(tanh)
  • ハイパボリックアークサイン(asinh)
  • ハイパボリックアークコサイン(acosh)
  • ハイパボリックアークタンジェント(atanh)

ただ、ハイパボリックサイン、アークサインといった内容は大学の理系数学の範囲になってきます。これらは基本的に専門的な内容になってきます。

よって、ここでは詳しく解説しませんが、上記と同じようなメソッドの使い方になります。

対数関数(Math.log)

最後に解説するのは対数関数になります。JavaScriptのMathオブジェクトには4つの対数関数を返すメソッドが組み込まれています。

早速みていきましょう。

console.log(`log2 = ${Math.log(2)}`);
console.log(`log2(16) = ${Math.log2(16)}`);
console.log(`log10(250000) = ${Math.log10(250000)}`);
console.log(`log(5) = ${Math.log1p(4)}`);
$node math.js

log2 = 0.6931471805599453
log2(16) = 4
log10(250000) = 5.3979400086720375
log5(300) = 1.6094379124341003

Mathオブジェクトの4つの対数関数、どれがそれぞれ何を意味するかを解説しましょう。

まず、1行目のメソッドは底がネイピア数、eの自然対数を求めます。2行目は底が2の対数関数を求めます。3行目は底が10です。最後は底がネイピア数、また、引数として与えたれた数に1を足した自然対数を返します。

まとめ

では今回のまとめに入りましょう。今回は下記のようなことについて学びました。

まとめ
  • Mathオブジェクト
  • 三角関数
  • 対数関数
  • 指数計算
  • 平方根

今回はここまでとなります。お疲れ様でした。

参考文献

タイトルとURLをコピーしました