#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 xi\t xr\t f(xl)\t f(xi)\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 xi\t xr\t f(xl)\t f(xi)\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+CgojZGVmaW5lIEVQUyAxZS01Cgpkb3VibGUgZihkb3VibGUgeCkgewogICAgcmV0dXJuIHgqeCAtIDEgLSBzaW4oeCk7Cn0KCmRvdWJsZSBiaXNlY3Rpb24oZG91YmxlIHhsLCBkb3VibGUgeHIpIHsKICAgIGRvdWJsZSB4aTsKICAgIGludCBpID0gMDsKCiAgICBwcmludGYoIiAgIOS6jOWIhuazlSAgIFxuIik7CiAgICBwcmludGYoImlcdCB4bFx0IHhpXHQgeHJcdCBmKHhsKVx0IGYoeGkpXHQgZih4cilcbiIpOwoKICAgIHdoaWxlICgxKSB7CiAgICAgICAgaSsrOwogICAgICAgIHhpID0gKHhsICsgeHIpIC8gMi4wOwoKICAgICAgICBwcmludGYoIiVkXHQgJS42ZiAlLjZmICUuNmYgJS42ZiAlLjZmICUuNmZcbiIsCiAgICAgICAgICAgICAgIGksIHhsLCB4aSwgeHIsIGYoeGwpLCBmKHhpKSwgZih4cikpOwoKICAgICAgICBpZiAoZmFicyhmKHhpKSkgPCBFUFMpIHsKICAgICAgICAgICAgcHJpbnRmKCLihpIgUm9vdCDiiYggJS42ZlxuIiwgeGkpOwogICAgICAgICAgICByZXR1cm4geGk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZih4bCkgKiBmKHhpKSA8IDApCiAgICAgICAgICAgIHhyID0geGk7CiAgICAgICAgZWxzZQogICAgICAgICAgICB4bCA9IHhpOwogICAgfQp9CgoKZG91YmxlIGZhbHNlX3Bvc2l0aW9uKGRvdWJsZSB4bCwgZG91YmxlIHhyKSB7CiAgICBkb3VibGUgeGk7CiAgICBpbnQgaSA9IDA7CgogICAgcHJpbnRmKCJcbiAgICDjga/jgZXjgb/jgYbjgaHms5UgICAgXG4iKTsKICAgIHByaW50ZigiaVx0IHhsXHQgeGlcdCB4clx0IGYoeGwpXHQgZih4aSlcdCBmKHhyKVxuIik7CgogICAgd2hpbGUgKDEpIHsKICAgICAgICBpKys7CgogICAgICAgIHhpID0gKHhsICogZih4cikgLSB4ciAqIGYoeGwpKSAvIChmKHhyKSAtIGYoeGwpKTsKCiAgICAgICAgcHJpbnRmKCIlZFx0ICUuNmYgJS42ZiAlLjZmICUuNmYgJS42ZiAlLjZmXG4iLAogICAgICAgICAgICAgICBpLCB4bCwgeGksIHhyLCBmKHhsKSwgZih4aSksIGYoeHIpKTsKCiAgICAgICAgaWYgKGZhYnMoZih4aSkpIDwgRVBTKSB7CiAgICAgICAgICAgIHByaW50Zigi4oaSIFJvb3Qg4omIICUuNmZcbiIsIHhpKTsKICAgICAgICAgICAgcmV0dXJuIHhpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGYoeGwpICogZih4aSkgPCAwKQogICAgICAgICAgICB4ciA9IHhpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgeGwgPSB4aTsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBwcmludGYoImYoeCkgPSB4XjIgLSAxIC0gc2luKHgpID0gMFxuIik7CgogICAgcHJpbnRmKCJcbj09PT09PT09PT09PT095Yy66ZaTWy0xLCAwXT09PT09PT09PT09PT09PT1cbiIpOwogICAgYmlzZWN0aW9uKC0xLjAsIDAuMCk7CiAgICBmYWxzZV9wb3NpdGlvbigtMS4wLCAwLjApOwoKICAgIHByaW50ZigiXG49PT09PT09PT09PeWMuumWk1sxLCAyXT09PT09PT09PT09PT09PT09PT1cbiIpOwogICAgYmlzZWN0aW9uKDEuMCwgMi4wKTsKICAgIGZhbHNlX3Bvc2l0aW9uKDEuMCwgMi4wKTsKCiAgICByZXR1cm4gMDsKfQo=