このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/837
#  [1] 授業単元:プログラミング 
#  [2] 問題文(含コード&リンク): 
#  実数x、y(y≠0)の入力に対し、商x / yを出力する。ただし、プログラム中で除算の式を用いないでNewton法の逐次近似で乗算と減算によりyの逆数zを求め、x×zを得ること。 
#  注意 逆数zを求める初期値の選択が悪いと2次の収束(反復ごとに精度が桁数で倍になる)をせず、極端な場合には振動して収束しない。 
#  

'実数x、y(y≠0)の入力に対し、商x / yを出力する'(_x,_y) :-
        初期値の選択(_y,_初期値),
        'yの逆数zの近似解をニュートン法で求める'(1,_y,_初期値,_z),
        _商 is _x * _z,
        writef('x / y の近似解は %t です\n',[_商]).

'xの逆数zの近似解をニュートン法で求める'(8,_,_z,_z) :- !.
'xの逆数zの近似解をニュートン法で求める'(N,_y,_y1,_z) :-
        _y2 is 2 * _y1 - _y * _y1 ^ 2,
        N2 is N + 1,
        'xの逆数zの近似解をニュートン法で求める'(N2,_y,_y2,_z),

初期値の選択(_y,_初期値) :-
        _初期値 is _y * 0.13,!.