JavaScript プログラミング |
8.数学関数
数学関数はJavaスクリプトで、Mathオブジェクトとして用意されている。三角関数(sin, cos, tan)などの関数がメソッドとして用意されている。
関数 | メソッド | 一般記述 | 使用例 | 結果 |
三角関数 | sin | sin 90゜ | Math.sin(45*Math.PI/180); | |
cos | cos 90゜ | Math.cos(45*Math.PI/180); | ||
tan | tan 90゜ | Math.tan(45*Math.PI/180); | ||
平方根 | sqrt | √2 | Math.sqrt(2); | |
べき乗 | pow | 24 | Math.pow(2,4); | |
対数 | log | loge10 | Math.log(10); | |
eのべき乗 | exp | e2 | Math.exp(2); | |
絶対値 | abs | |-5| | Math.abs(-5); | |
整数化 (大きい整数) |
ceil | Math.ceil(10.1); Math.ceil(-10.1); |
||
整数化 (四捨五入) |
round | Math.round(10.4); Math.round(10.5); |
||
整数化 (小さい整数) |
floor | Math.floor(10.1); Math.floor(-10.1); |
||
最大値 | max | Math.max(1,2,3,4,5); | ||
最小値 | min | Math.min(1,2,3,4,5); | ||
乱数(0≦r<1) | random | Math.random(); |
ほかに、よく使われる定数(計算値)がプロパティとして用意されている。
定数 | プロパティ | 一般記述 | 使用例 | 値 |
円周率 | PI | π | Math.PI | |
自然対数の底e | E | e | Math.E | |
10の自然対数 | LN10 | loge10 | Math.LN10 | |
2の自然対数 | LN2 | loge2 | Math.LN2 | |
eの常用対数 | LOG10E | log10e | Math.LOG10E | |
eの対数(底を2とする) | LOG2E | log2e | Math.LOG2E | |
2の平方根 | SQRT2 | √2 | Math.SQRT2 | |
2の平方根の1/2 | SQRT1_2 | Math.SQRT1_2 |
(1) 乱数
乱数は規則性のない数列、すなわち、でたらめな順番で現れる数であり、その数の現れる割合はほぼ同じとなる。
いろいろな言語では、乱数を得るための命令や関数が用意されているが、多くは計算によって求められた乱数であり、正確な乱数とはいえず、一般に擬似乱数と呼ばれている。
Javaスクリプトにも乱数は用意されており、Mathオブジェクトのrandomメソッドで0から1未満の範囲の得ることができる。
特定範囲の乱数
ある範囲の整数の乱数を求めるには、次の式を使う。
Math.floor((upper - lower + 1) * Math.random() + lower)
問題 ジャンケンのプログラムでコンピュータが出す手を乱数によって決定する。グーを1、チョキを2、パーを3とするとき、1から3までの乱数を発生させることになる。そこで次のようなプログラムを作成した。
HTMLリスト [[jsrei11.html]]
<HTML> <HEAD> <TITLE>ジャンケン</TITLE> </HEAD> <BODY><SCRIPT language="JavaScript"> <!-- function ransuu(form1){ form1.disp.value = "" //表示エリアのクリア jk = new Array("", "グー", "チョキ", "パー"); for(n = 0; n < form1.kaisu.value; ++n){ rnd = Math.floor((3-1+1) * Math.random() + 1); form1.disp.value = form1.disp.value + jk[rnd] + "\n"; } } //--> </SCRIPT> <P>ジャンケン</P> <FORM> <INPUT size="10" type="text" name="kaisu"> 回 <INPUT type="button" value="乱数発生" onclick="ransuu(this.form);"><BR> <TEXTAREA rows="10" cols="50" name="disp"></TEXTAREA> </FORM> </BODY> </HTML>
グー、チョキ、パーがでたらめな順序で現れているだろうか。さらにグー、チョキ、パーがほぼ同じ回数ずつ現れているだろうか。
ジャンケン サンプル
@ このままでは、グー、チョキ、パーがそれぞれ何回かわかりにくいので、現れた回数をalertで表示するようにプログラムを変更しなさい。
実行してみると次のようになった。 ただし、乱数なので必ずこのような結果になるとは限らない。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10回実行
|
100回実行
|
ばらつきはあるが出現の割合は、ほぼ33%程度であるが、実行回数が少ないとばらつきが大きくなっている。
A グー出現の割合が50%、チョキとパーがそれぞれ25%程度になるようにプログラムを変更しなさい。
ヒント:1から4の乱数を発生させる。各値は25%程度となる。ここで、4のときは1とすれば.....
実行してみると次のようになった。 ただし、乱数なので必ずこのような結果になるとは限らない。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10回実行
|
100回実行
|
JavaScript プログラミング | Copyright © 2003 Hiroshi Masuda |