use std::f64::consts::E;
pub fn sin(x:f64)->f64{
let mut result:f64 = 0.0;
for n in 0..{
let addition = x.powi(n*2+1) / factorio(n as i128*2+1);
result += if n % 2 == 0 {addition} else {-addition};
if addition < 1e-10{
break;
}
}
result
}
pub fn cos(x:f64)->f64{
let mut result:f64 = 0.0;
for n in 0..{
let addition = x.powi(n*2) / factorio(n as i128*2);
result += if n % 2 == 0 {addition} else {-addition};
if addition < 1e-10{
break;
}
}
result
}
pub fn factorio(x:i128)->f64{
let mut result:f64 = 1.0;
for i in 1..=x{
result *= i as f64;
}
result
}
/// ta funkcja jest dokładniejsza od funkcji ln() ale działa tylko w x zakresie 0 > x >= 2
pub fn ln2(x:f64)->f64{
if x <= 0.0 || x > 2.0{
return 0.0;
}
let mut result:f64 = 0.0;
for n in 1..{
let b:f64 = (-1i32).pow(n+1) as f64;
let a:f64 = b/n as f64;
let addition = a*(x-1.0).powi(n as i32);
result += addition;
if addition.abs() < 1e-10{
break;
}
}
result
}
pub fn ln(x:f64)->f64{
let y:f64=0.000000000001;
return (x.powf(y)-1.0)/y;
}
/// ta funkcja jest dokładniejsza od funkcji sqrt() ale działa tylko w x zakresie 0 > x >= 2
pub fn sqrt2(x:f64)->f64{
return E.powf(ln2(x)/2.0);
}
pub fn sqrt(x:f64)->f64{
return E.powf(ln(x)/2.0);
}