26.1.3.5 じわじわ法

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);
    }
}

fileRoot2a.java

このプログラムでは実数(real number)を使っていますから,本当は実数の精度についての注意が必要ですが,ここではとりあえず精度の問題はおいておくことにします.

ある パラメータが実数であることは,キーワードdoubleが示しています.整数用のintのかわりです.ここでは, パラメータeが実数でその初期値が0.000000001であり,さらに パラメータxも実数であると指定しています.

caution このプログラムの実行には iMac端末で2秒前後かかります

このプログラムの出力は

Square Root of 2 = 1.414213562272181

のようになるはずです.

caution「1.4142135621」にならないのはJavaの実数では誤差がたまってしまうからです.

プログラムの主要部は1個のwhile形式で,最初1.0にセットされたxを,その2乗(x*x)が2未満である間,繰り返しe(=0.000000001)を加えてゆきます.次の"x=x-e"は行き過ぎの補正ですが,どうせ近似値なのでこれはなくても構いません.

このプログラムでは,whileの繰返しを414213529回も実行します.どう考えてみても無駄が多いですね.それで次の方法の登場となります.