Work out Math by JavaScript !
relead
√二乗根の計算
§0 はじめに
JavaScriptによるルートの計算をします。
タイトルに二乗根と有りますが、正確には、ルートと二乗根は違
います。 √4=2 に対して 4の二乗根=2,-2の二つ です。こ
の内、実数で正であるほうをルートと定義します。
§1 Mathメソッドの利用
一応知らない人に言うと、javascriptには、いくつかメソッド
というものが用意されています。メソッドというのは言うなれば
あらかじめ用意されている道具(函数)の集まりです。C言語を
知ってる人用にいうと#include のmath.hです。
Mathメソッドの中には、サイン函数やコサイン函数、他色々な
ものが入っていて、簡単に使うことができます。例えば、サイン
関数はsin()です。実際に使うときには、Mathメソッド内の
sin()ということを明確にするため、Math.sin()
と使います。Mは大文字
括弧()の中には数値をsinに渡す数値を入れます。
ちなみにですが
1.23e-2なんて数値が出ることがたまにあります。
これは、1.23×10の-2乗、つまり0.0123のことです。
9.87e4とあれば、98700です。
1.224…e-16とあれば、1.224×10の-16乗ですので≒0と考えてください。
で、そのMathメソッドには大抵の計算の為の道具が入っていまし
てsqrt()ってのが有ります。これが、ルートを求める函数です。
Math.sqrt(4)
という風に使って"2"が帰ってきます。
§2 無理矢理ヴぁ
セクション1では、sqrtをつかってあっさりと計算が済んでしまいました。
ただ、桁数の限りがあるので、ここでは、延々と小数点以下を計算する
プログラムを作りましょう。
「無理矢理ヴぁ」で、やります。
即ち√2を計算するとき、答えをansとするとき、
ans=0だと、ans2=0
ans=1だと、ans2=1
ans=2だと、ans2=4 ←2を超えるのでアウト、
以上から整数の部分は1だと分かります。
ans=1.3だと、ans2=1.69
ans=1.4だと、ans2=1.96
ans=1.5だと、ans2=2.25 ←2を超えるのでアウト、
以上から少数第一位は4だと分かります。
この様に一つずつ試すことで、一桁ずつ決定して行きます。
無理矢理です。
まず、nを指定して求める数値z = √nとします。
z=0;//グローバル変数 結果的にzが√nになる予定
//整数部分の決定
function Det1(){
for(i=0;i<n;i++){
if(i*i <= n)z=i; //i*i
ただ、この調子で小数点第?位の函数を書くのは大変なの
で、もう少し一般化します。
n=prompt("√nを計算します。 nの部分を入力してください",2);//nを入力してもらいます。
z=0;//グローバル変数 結果的にzが√nになる予定
for(j=0;j<=6;j++){ 小数点第6位まで計算します
m=Math.pow(10,j);//10のj乗(10の0乗は1です)
Det(m);
}
alert("ファニエルさんが計算した結果: "+z+"\nMathメソッドで計算した結果: "+Math+""); //zとMathメソッドを使った計算結果の表示(比較のため)
function Det(m){
for(i=0;i<Math.max(n,10);i++){
//Math.max(n,10)ってのはnと10で大きい方、を示す函数です。
//コンピュータの仕事を減らす為の処理です。
if((z+i/m)*(z+i/m) <= n)k=i;
}z += (k/m);
}
つまりDet(0);Det(10);Det(100);Det(1000);...と実行すること
になります。脳内インタプリタで確かめてみてください。
では実際に実験
上手くいきましたかね?ソースを見ていただくと分かりますが実は
ちょっと改良しています。まあ、大事なことでは無いので特に言及
しませんが。
§3 手計算「開平方」のシミュレーション
cd ../ 戻る