class Root2a { public static void main(String argv[ ]) { double e=0.000000001,x; x=1.0; while(x*x < 2.0) x=x+e; x=x-e; System.out.println("Square Root of 2 = " + x); } }
このプログラムでは実数(real number)を使っていますから,本当は実数の精度についての注意が必要ですが,ここではとりあえず精度の問題はおいておくことにします.
ある パラメータが実数であることは,キーワードdoubleが示しています.整数用のintのかわりです.ここでは, パラメータeが実数でその初期値が0.000000001であり,さらに パラメータxも実数であると指定しています.
このプログラムの実行には iMac端末で2秒前後かかります
このプログラムの出力は
Square Root of 2 = 1.414213562272181
のようになるはずです.
「1.4142135621」にならないのはJavaの実数では誤差がたまってしまうからです.
プログラムの主要部は1個のwhile形式で,最初1.0にセットされたxを,その2乗(x*x)が2未満である間,繰り返しe(=0.000000001)を加えてゆきます.次の"x=x-e"は行き過ぎの補正ですが,どうせ近似値なのでこれはなくても構いません.
このプログラムでは,whileの繰返しを414213529回も実行します.どう考えてみても無駄が多いですね.それで次の方法の登場となります.
26.1.3.4 計算の手間 | 26.1.3.5 じわじわ法 | 26.1.3.6 10分の1法 | ||
2009年度版に向けて現在作業中です.
このページに関してお気づきの点がありましたら
コメント投稿システムまでお願いします.
|
Mon, 17 Mar 2008 21:22:31 JST (501d) |