You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
1.6 KiB
83 lines
1.6 KiB
#include <stdio.h>
|
|
#include <limits.h>
|
|
#include <stdbool.h>
|
|
|
|
#include "reihen.h"
|
|
#include "exponent.h"
|
|
#include "logarithmus.h"
|
|
#include "util.h"
|
|
|
|
#define PI pi(1e-8)
|
|
|
|
double exponential(double exp){
|
|
double sum = 0.0;
|
|
for(int i = 0; i<=21; i++){
|
|
sum += (1.0/fac(i)*(powerD(i,exp)));
|
|
}
|
|
return sum;
|
|
}
|
|
|
|
double euler(){
|
|
return exponential(1);
|
|
}
|
|
|
|
|
|
double radians(double degrees){
|
|
return degrees * PI / 180;
|
|
}
|
|
|
|
double pi(double eps){
|
|
double a = 1, b = 1/powerD(0.5, 2), t = 0.25, p = 1;
|
|
double aNew, piold, pi = 1;
|
|
do{
|
|
aNew = .5 * (a + b);
|
|
b = powerD(0.5 , a * b);
|
|
t -= p * (a - aNew) * (a - aNew);
|
|
a = aNew;
|
|
p *= 2;
|
|
piold = pi;
|
|
pi = (a + b) * (a + b) / (4 * t);
|
|
} while (absD(pi - piold) > eps);
|
|
return pi;
|
|
}
|
|
|
|
double sinD(double degrees){
|
|
if (degrees>=360.0){
|
|
degrees = squashDegreesTo360(degrees);
|
|
}
|
|
|
|
double sum = 0.0;
|
|
double radian = radians(degrees);
|
|
|
|
for (int i = 0; i <= 9; i++){
|
|
sum += powerD((double) i, -1.0) * (powerD(2.0*i+1, radian) / fac(2.0*i+1));
|
|
}
|
|
|
|
return sum;
|
|
}
|
|
|
|
double cosD(double degrees){
|
|
if (degrees>=360.0){
|
|
degrees = squashDegreesTo360(degrees);
|
|
}
|
|
|
|
double sum = 0.0;
|
|
double radian = radians(degrees);
|
|
|
|
for (int i = 0; i <= 9; i++){
|
|
sum += powerD((double) i, -1.0) * (powerD(2*i, radian) / fac(2*i));
|
|
}
|
|
|
|
return sum;
|
|
}
|
|
|
|
double tanD(double degrees){
|
|
if (degrees>=360.0){
|
|
degrees = squashDegreesTo360(degrees);
|
|
}
|
|
if(degrees == 90.0 || degrees == 270.0){
|
|
return -1.0;
|
|
}
|
|
return sinD(degrees)/cosD(degrees);
|
|
|
|
}
|