# 二分法の例 awk ' BEGIN { print find_zero(0, 3) exit 0 } # 区間 a <= x <= b で測定値が 0 になる x を探す function find_zero(a, b) { fa = meas(a) fb = meas(b) for (i = 0; i < 100; i++) { if ((b - a) / (a + b) < 5e-3) break c = (a + b) * 0.5 fc = meas(c) if (fc * fa > 0.0) { a = c fa = c } else { b = c fb = fc } } if (i == 100) print "Retry over." >"/dev/stderr" return (a + b) * 0.5 } # 変数 x に対する測定値 function meas(x) { return cos(x) } '