Files
AwesomePolytech/OSs/lab-libs/lib.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;
}