#include <stdio.h>
#include <math.h>
#define EPS 1e-5
double f(double x) {
}
double bisection(double xl, double xr) {
double xi;
int i = 0;
printf("i\t xl\t\t xi\t\t xr\t\t f(xl)\t\t f(xi)\t\t f(xr)\n");
while (1) {
i++;
xi = (xl + xr) / 2.0;
printf("%d\t %.6f %.6f %.6f %.6f %.6f %.6f\n", i, xl, xi, xr, f(xl), f(xi), f(xr));
printf("→ Root ≈ %.6f\n", xi
); return xi;
}
if (f(xl) * f(xi) < 0)
xr = xi;
else
xl = xi;
}
}
double false_position(double xl, double xr) {
double xi;
int i = 0;
printf("i\t xl\t\t xi\t\t xr\t\t f(xl)\t\t f(xi)\t\t f(xr)\n");
while (1) {
i++;
xi = (xl * f(xr) - xr * f(xl)) / (f(xr) - f(xl));
printf("%d\t %.6f %.6f %.6f %.6f %.6f %.6f\n", i, xl, xi, xr, f(xl), f(xi), f(xr));
printf("→ Root ≈ %.6f\n", xi
); return xi;
}
if (f(xl) * f(xi) < 0)
xr = xi;
else
xl = xi;
}
}
int main() {
printf("f(x) = x^2 - 1 - sin(x) = 0\n");
printf("\n==============区間[-1, 0]================\n"); bisection(-1.0, 0.0);
false_position(-1.0, 0.0);
printf("\n===========区間[1, 2]===================\n"); bisection(1.0, 2.0);
false_position(1.0, 2.0);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgojZGVmaW5lIEVQUyAxZS01Cgpkb3VibGUgZihkb3VibGUgeCkgewogICAgcmV0dXJuIHgqeCAtIDEgLSBzaW4oeCk7Cn0KCmRvdWJsZSBiaXNlY3Rpb24oZG91YmxlIHhsLCBkb3VibGUgeHIpIHsKICAgIGRvdWJsZSB4aTsKICAgIGludCBpID0gMDsKCiAgICBwcmludGYoIiAgIOS6jOWIhuazlSAgIFxuIik7CiAgICBwcmludGYoImlcdCB4bFx0XHQgeGlcdFx0IHhyXHRcdCBmKHhsKVx0XHQgZih4aSlcdFx0IGYoeHIpXG4iKTsKCiAgICB3aGlsZSAoMSkgewogICAgICAgIGkrKzsKICAgICAgICB4aSA9ICh4bCArIHhyKSAvIDIuMDsKCiAgICAgICAgcHJpbnRmKCIlZFx0ICUuNmYgJS42ZiAlLjZmICUuNmYgJS42ZiAlLjZmXG4iLAogICAgICAgICAgICAgICBpLCB4bCwgeGksIHhyLCBmKHhsKSwgZih4aSksIGYoeHIpKTsKCiAgICAgICAgaWYgKGZhYnMoZih4aSkpIDwgRVBTKSB7CiAgICAgICAgICAgIHByaW50Zigi4oaSIFJvb3Qg4omIICUuNmZcbiIsIHhpKTsKICAgICAgICAgICAgcmV0dXJuIHhpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGYoeGwpICogZih4aSkgPCAwKQogICAgICAgICAgICB4ciA9IHhpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgeGwgPSB4aTsKICAgIH0KfQoKCmRvdWJsZSBmYWxzZV9wb3NpdGlvbihkb3VibGUgeGwsIGRvdWJsZSB4cikgewogICAgZG91YmxlIHhpOwogICAgaW50IGkgPSAwOwoKICAgIHByaW50ZigiICAgIOOBr+OBleOBv+OBhuOBoeazlSAgICBcbiIpOwogICAgcHJpbnRmKCJpXHQgeGxcdFx0IHhpXHRcdCB4clx0XHQgZih4bClcdFx0IGYoeGkpXHRcdCBmKHhyKVxuIik7CgogICAgd2hpbGUgKDEpIHsKICAgICAgICBpKys7CgogICAgICAgIHhpID0gKHhsICogZih4cikgLSB4ciAqIGYoeGwpKSAvIChmKHhyKSAtIGYoeGwpKTsKCiAgICAgICAgcHJpbnRmKCIlZFx0ICUuNmYgJS42ZiAlLjZmICUuNmYgJS42ZiAlLjZmXG4iLAogICAgICAgICAgICAgICBpLCB4bCwgeGksIHhyLCBmKHhsKSwgZih4aSksIGYoeHIpKTsKCiAgICAgICAgaWYgKGZhYnMoZih4aSkpIDwgRVBTKSB7CiAgICAgICAgICAgIHByaW50Zigi4oaSIFJvb3Qg4omIICUuNmZcbiIsIHhpKTsKICAgICAgICAgICAgcmV0dXJuIHhpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGYoeGwpICogZih4aSkgPCAwKQogICAgICAgICAgICB4ciA9IHhpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgeGwgPSB4aTsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBwcmludGYoImYoeCkgPSB4XjIgLSAxIC0gc2luKHgpID0gMFxuIik7CgogICAgcHJpbnRmKCJcbj09PT09PT09PT09PT095Yy66ZaTWy0xLCAwXT09PT09PT09PT09PT09PT1cbiIpOwogICAgYmlzZWN0aW9uKC0xLjAsIDAuMCk7CiAgICBmYWxzZV9wb3NpdGlvbigtMS4wLCAwLjApOwoKICAgIHByaW50ZigiXG49PT09PT09PT09PeWMuumWk1sxLCAyXT09PT09PT09PT09PT09PT09PT1cbiIpOwogICAgYmlzZWN0aW9uKDEuMCwgMi4wKTsKICAgIGZhbHNlX3Bvc2l0aW9uKDEuMCwgMi4wKTsKCiAgICByZXR1cm4gMDsKfQo=