Wow, maths functions!
This commit is contained in:
parent
d9b8e481aa
commit
c0639c609a
3 changed files with 52 additions and 0 deletions
21
math/log.c
Normal file
21
math/log.c
Normal file
|
@ -0,0 +1,21 @@
|
|||
#include <math.h>
|
||||
|
||||
double _agm(double x, double y) {
|
||||
double a = x;
|
||||
double g = y;
|
||||
double temp;
|
||||
|
||||
for(int i = 0; i < 15; i++) {
|
||||
temp = 0.5 * (a + g);
|
||||
g = sqrt(a * g);
|
||||
a = temp;
|
||||
}
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
double log(double x) {
|
||||
double s = x * exp2(24);
|
||||
double nat_log = (M_PI / (2 * _agm(1, 4/s))) - (24 * M_LN2);
|
||||
return nat_log;
|
||||
}
|
5
math/pow.c
Normal file
5
math/pow.c
Normal file
|
@ -0,0 +1,5 @@
|
|||
#include <math.h>
|
||||
|
||||
double pow(double x, double y) {
|
||||
return exp(y * log(x));
|
||||
}
|
26
math/sqrt.c
Normal file
26
math/sqrt.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
#include <math.h>
|
||||
|
||||
typedef union {
|
||||
double d;
|
||||
struct {
|
||||
unsigned long int mantissa : 52;
|
||||
unsigned int exponent : 11;
|
||||
unsigned int sign_bit : 1;
|
||||
} parts;
|
||||
} _dbl_cast;
|
||||
|
||||
double sqrt(double x) {
|
||||
_dbl_cast S = { .d = x };
|
||||
double estimate = (0.5 + 0.5 * S.parts.mantissa) *
|
||||
exp2(S.parts.exponent - 1023);
|
||||
|
||||
double a_n, b_n;
|
||||
|
||||
for(int i = 0; i < 15; i++) {
|
||||
a_n = (x - (estimate * estimate)) / (2 * estimate);
|
||||
b_n = estimate + a_n;
|
||||
estimate = b_n - ((a_n * a_n) / (2 * b_n));
|
||||
}
|
||||
|
||||
return estimate;
|
||||
}
|
Loading…
Reference in a new issue