feat: libraries lab complete
This commit is contained in:
45
OSs/lab-libs/lib.c
Normal file
45
OSs/lab-libs/lib.c
Normal file
@ -0,0 +1,45 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user