#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+CgojZGVmaW5lIEVQUyAxZS01Cgpkb3VibGUgZihkb3VibGUgeCkgewogICAgcmV0dXJuIHgqeCAtIDEgLSBzaW4oeCk7Cn0KCmRvdWJsZSBiaXNlY3Rpb24oZG91YmxlIHhsLCBkb3VibGUgeHIpIHsKICAgIGRvdWJsZSB4aTsKICAgIGludCBpID0gMDsKCiAgICBwcmludGYoIiAgIOS6jOWIhuazlSAgIFxuIik7CiAgICBwcmludGYoImlcdCB4bFx0XHQgeGlcdFx0IHhyXHRcdCBmKHhsKVx0XHQgZih4aSlcdFx0IGYoeHIpXG4iKTsKCiAgICB3aGlsZSAoMSkgewogICAgICAgIGkrKzsKICAgICAgICB4aSA9ICh4bCArIHhyKSAvIDIuMDsKCiAgICAgICAgcHJpbnRmKCIlZFx0ICUuNmYgJS42ZiAlLjZmICUuNmYgJS42ZiAlLjZmXG4iLAogICAgICAgICAgICAgICBpLCB4bCwgeGksIHhyLCBmKHhsKSwgZih4aSksIGYoeHIpKTsKCiAgICAgICAgaWYgKGZhYnMoZih4aSkpIDwgRVBTKSB7CiAgICAgICAgICAgIHByaW50Zigi4oaSIFJvb3Qg4omIICUuNmZcbiIsIHhpKTsKICAgICAgICAgICAgcmV0dXJuIHhpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGYoeGwpICogZih4aSkgPCAwKQogICAgICAgICAgICB4ciA9IHhpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgeGwgPSB4aTsKICAgIH0KfQoKCmRvdWJsZSBmYWxzZV9wb3NpdGlvbihkb3VibGUgeGwsIGRvdWJsZSB4cikgewogICAgZG91YmxlIHhpOwogICAgaW50IGkgPSAwOwoKICAgIHByaW50ZigiXG4gICAg44Gv44GV44G/44GG44Gh5rOVICAgIFxuIik7CiAgICBwcmludGYoImlcdCB4bFx0XHQgeGlcdFx0IHhyXHRcdCBmKHhsKVx0XHQgZih4aSlcdFx0IGYoeHIpXG4iKTsKCiAgICB3aGlsZSAoMSkgewogICAgICAgIGkrKzsKCiAgICAgICAgeGkgPSAoeGwgKiBmKHhyKSAtIHhyICogZih4bCkpIC8gKGYoeHIpIC0gZih4bCkpOwoKICAgICAgICBwcmludGYoIiVkXHQgJS42ZiAlLjZmICUuNmYgJS42ZiAlLjZmICUuNmZcbiIsCiAgICAgICAgICAgICAgIGksIHhsLCB4aSwgeHIsIGYoeGwpLCBmKHhpKSwgZih4cikpOwoKICAgICAgICBpZiAoZmFicyhmKHhpKSkgPCBFUFMpIHsKICAgICAgICAgICAgcHJpbnRmKCLihpIgUm9vdCDiiYggJS42ZlxuIiwgeGkpOwogICAgICAgICAgICByZXR1cm4geGk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZih4bCkgKiBmKHhpKSA8IDApCiAgICAgICAgICAgIHhyID0geGk7CiAgICAgICAgZWxzZQogICAgICAgICAgICB4bCA9IHhpOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIHByaW50ZigiZih4KSA9IHheMiAtIDEgLSBzaW4oeCkgPSAwXG4iKTsKCiAgICBwcmludGYoIlxuPT09PT09PT09PT09PT3ljLrplpNbLTEsIDBdPT09PT09PT09PT09PT09PVxuIik7CiAgICBiaXNlY3Rpb24oLTEuMCwgMC4wKTsKICAgIGZhbHNlX3Bvc2l0aW9uKC0xLjAsIDAuMCk7CgogICAgcHJpbnRmKCJcbj09PT09PT09PT095Yy66ZaTWzEsIDJdPT09PT09PT09PT09PT09PT09PVxuIik7CiAgICBiaXNlY3Rpb24oMS4wLCAyLjApOwogICAgZmFsc2VfcG9zaXRpb24oMS4wLCAyLjApOwoKICAgIHJldHVybiAwOwp9Cg==