Scribble at 2020-11-26 11:11:17 Last modified: 2020-11-26 21:50:31
SICP の冒頭に出てくる、2の(正の)平方根を近似する procedure(Square Roots by Newton's Method)を PHP で簡単に書くと上記のようになる。$guess = 1.0 から出発すると、4回目の計算で "1.4142135623731" に達して、後は同じ答えが続く。$guess = 5.0 にしても6回目、$guess = 100.0 にしても11回目には "1.4142135623731" に至る。さらに SICP で出てくる "good-enough?" を実装すると、for ループを do-while ループに書き換えて、$guess^2 と 2.0 の差が一定の範囲よりも小さくなったときに break すれば良い。
なお、PHP で普通に計算させると桁数が少ないので、bcadd() や bcmul() を使って50桁くらいにしてもいいのだが、実際にはあまり結果は変わらず、"good-enough?" の判定基準をせいぜい小数点以下14桁くらいにすると、結果の精度は変わらなくなる。