46 lines
871 B
C
46 lines
871 B
C
#include "lib.h"
|
|
|
|
#include <math.h>
|
|
|
|
#define ZEROIN_MAX_ITERATIONS 1000
|
|
|
|
size_t fibo(size_t n)
|
|
{
|
|
size_t prev = 0, cur = 1, tmp = 0;
|
|
for (size_t i = 0; i < n; i++) {
|
|
tmp = cur;
|
|
cur = cur + prev;
|
|
prev = tmp;
|
|
}
|
|
return cur;
|
|
}
|
|
|
|
double zeroin(double (*f)(double), double err, double a, double b)
|
|
{
|
|
double left = f(a);
|
|
if (fabs(left) < err) return left;
|
|
double right = f(b);
|
|
if (fabs(right) < err) return right;
|
|
if (left * right > 0) {
|
|
return NAN;
|
|
}
|
|
|
|
double x = NAN;
|
|
double cur = NAN;
|
|
size_t n = 0;
|
|
do {
|
|
x = (a + b) / 2;
|
|
cur = f(x);
|
|
if (cur * left > 0) {
|
|
left = cur;
|
|
a = x;
|
|
}
|
|
else {
|
|
right = cur;
|
|
b = x;
|
|
}
|
|
n++;
|
|
} while (fabs(cur) > err || n < ZEROIN_MAX_ITERATIONS);
|
|
return x;
|
|
}
|