#include <stdio.h>
#include <math.h>
#define EPS 1e-5
double f(double x) {
}
int main() {
double a1 = -1.0, b1 = 0.0;
double a2 = 1.0, b2 = 2.0;
double mid1, mid2;
int iter = 0;
printf("Iter | [-1,0] interval | [1,2] interval\n"); printf(" | a b mid f(mid) | a b mid f(mid)\n");
while (1) {
iter++;
mid1 = (a1 + b1) / 2.0;
mid2 = (a2 + b2) / 2.0;
printf("%2d | %.6f %.6f %.6f %.6f | %.6f %.6f %.6f %.6f\n", iter,
a1, b1, mid1, f(mid1),
a2, b2, mid2, f(mid2));
// 収束チェック(両方満たしたら終了)
if (fabs(f
(mid1
)) < EPS
&& fabs(f
(mid2
)) < EPS
) { break;
}
// 区間1更新
if (f(a1) * f(mid1) < 0) {
b1 = mid1;
} else {
a1 = mid1;
}
// 区間2更新
if (f(a2) * f(mid2) < 0) {
b2 = mid2;
} else {
a2 = mid2;
}
}
printf("Root in [-1,0] ≈ %.6f\n", mid1
); printf("Root in [1,2] ≈ %.6f\n", mid2
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgojZGVmaW5lIEVQUyAxZS01Cgpkb3VibGUgZihkb3VibGUgeCkgewogICAgcmV0dXJuIHgqeCAtIDEgLSBzaW4oeCk7Cn0KCmludCBtYWluKCkgewogICAgZG91YmxlIGExID0gLTEuMCwgYjEgPSAwLjA7CiAgICBkb3VibGUgYTIgPSAxLjAsICBiMiA9IDIuMDsKCiAgICBkb3VibGUgbWlkMSwgbWlkMjsKICAgIGludCBpdGVyID0gMDsKCiAgICBwcmludGYoIkl0ZXIgfCAgIFstMSwwXSBpbnRlcnZhbCAgICAgICAgICAgICAgICAgIHwgICBbMSwyXSBpbnRlcnZhbFxuIik7CiAgICBwcmludGYoIiAgICAgfCBhICAgICAgICBiICAgICAgICBtaWQgICAgICBmKG1pZCkgIHwgYSAgICAgICAgYiAgICAgICAgbWlkICAgICAgZihtaWQpXG4iKTsKCiAgICB3aGlsZSAoMSkgewogICAgICAgIGl0ZXIrKzsKCiAgICAgICAgbWlkMSA9IChhMSArIGIxKSAvIDIuMDsKICAgICAgICBtaWQyID0gKGEyICsgYjIpIC8gMi4wOwoKICAgICAgICBwcmludGYoIiUyZCAgIHwgJS42ZiAlLjZmICUuNmYgJS42ZiB8ICUuNmYgJS42ZiAlLjZmICUuNmZcbiIsCiAgICAgICAgICAgICAgIGl0ZXIsCiAgICAgICAgICAgICAgIGExLCBiMSwgbWlkMSwgZihtaWQxKSwKICAgICAgICAgICAgICAgYTIsIGIyLCBtaWQyLCBmKG1pZDIpKTsKCiAgICAgICAgLy8g5Y+O5p2f44OB44Kn44OD44Kv77yI5Lih5pa55rqA44Gf44GX44Gf44KJ57WC5LqG77yJCiAgICAgICAgaWYgKGZhYnMoZihtaWQxKSkgPCBFUFMgJiYgZmFicyhmKG1pZDIpKSA8IEVQUykgewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIC8vIOWMuumWkzHmm7TmlrAKICAgICAgICBpZiAoZihhMSkgKiBmKG1pZDEpIDwgMCkgewogICAgICAgICAgICBiMSA9IG1pZDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYTEgPSBtaWQxOwogICAgICAgIH0KCiAgICAgICAgLy8g5Yy66ZaTMuabtOaWsAogICAgICAgIGlmIChmKGEyKSAqIGYobWlkMikgPCAwKSB7CiAgICAgICAgICAgIGIyID0gbWlkMjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhMiA9IG1pZDI7CiAgICAgICAgfQogICAgfQoKICAgIHByaW50ZigiXG5GaW5hbCBSZXN1bHRzOlxuIik7CiAgICBwcmludGYoIlJvb3QgaW4gWy0xLDBdIOKJiCAlLjZmXG4iLCBtaWQxKTsKICAgIHByaW50ZigiUm9vdCBpbiBbMSwyXSDiiYggJS42ZlxuIiwgbWlkMik7CgogICAgcmV0dXJuIDA7Cn0K