math.v: log_n, log2, exp2, cbrt and docs

pull/647/head
paolopaoletto 2019-06-30 13:33:37 +00:00 committed by Alexander Medvednikov
parent 392b49c661
commit e2a535c3ce
1 changed files with 47 additions and 1 deletions

View File

@ -21,6 +21,7 @@ const (
Log10E = 1.0 / Ln10 Log10E = 1.0 / Ln10
) )
// Returns the absolute value.
pub fn abs(a f64) f64 { pub fn abs(a f64) f64 {
if a < 0 { if a < 0 {
return -a return -a
@ -28,42 +29,62 @@ pub fn abs(a f64) f64 {
return a return a
} }
// Inverse cosine.
pub fn acos(a f64) f64 { pub fn acos(a f64) f64 {
return C.acos(a) return C.acos(a)
} }
// Inverse sine.
pub fn asin(a f64) f64 { pub fn asin(a f64) f64 {
return C.asin(a) return C.asin(a)
} }
// Inverse tangent
pub fn atan(a f64) f64 { pub fn atan(a f64) f64 {
return C.atan(a) return C.atan(a)
} }
// Inverse tangent with two arguments, returns angle between the X axis and the point.
pub fn atan2(a, b f64) f64 { pub fn atan2(a, b f64) f64 {
return C.atan2(a, b) return C.atan2(a, b)
} }
// Cubic root.
pub fn cbrt(a f64) f64 {
return C.cbrt(a)
}
// Returns the nearest integer equal or higher to the provided value.
pub fn ceil(a f64) f64 { pub fn ceil(a f64) f64 {
return C.ceil(a) return C.ceil(a)
} }
// Cosine.
pub fn cos(a f64) f64 { pub fn cos(a f64) f64 {
return C.cos(a) return C.cos(a)
} }
// Hyperbolic cosine.
pub fn cosh(a f64) f64 { pub fn cosh(a f64) f64 {
return C.cosh(a) return C.cosh(a)
} }
// Returns euler number (e) raised to the provided power.
pub fn exp(a f64) f64 { pub fn exp(a f64) f64 {
return C.exp(a) return C.exp(a)
} }
// Returns the base-2 exponential function of x.
pub fn exp2(a f64) f64 {
return C.exp2(a)
}
// Returns the nearest integer equal or lower of the provided value.
pub fn floor(a f64) f64 { pub fn floor(a f64) f64 {
return C.floor(a) return C.floor(a)
} }
// Returns the floating-point remainder of number / denom (rounded towards zero):
pub fn fmod(a, b f64) f64 { pub fn fmod(a, b f64) f64 {
return C.fmod(a, b) return C.fmod(a, b)
} }
@ -98,14 +119,27 @@ pub fn lcm(a, b int) int {
return res return res
} }
// Returns natural (base e) logarithm of the provided value.
pub fn log(a f64) f64 { pub fn log(a f64) f64 {
return C.log(a) return C.log(a)
} }
// Returns base 2 logarithm of the provided value.
pub fn log2(a f64) f64 {
return C.log(a) / C.log(2)
}
// Returns the common (base-10) logarithm of x.
pub fn log10(a f64) f64 { pub fn log10(a f64) f64 {
return C.log10(a) return C.log10(a)
} }
// Returns base N logarithm of the provided value.
pub fn log_n(a, b f64) f64 {
return C.log(a) / C.log(b)
}
// Returns the maximum value of the two provided.
pub fn max(a, b f64) f64 { pub fn max(a, b f64) f64 {
if a > b { if a > b {
return a return a
@ -113,6 +147,7 @@ pub fn max(a, b f64) f64 {
return b return b
} }
// Returns the minimum value of all the values provided.
pub fn min(a, b f64) f64 { pub fn min(a, b f64) f64 {
if a < b { if a < b {
return a return a
@ -120,46 +155,57 @@ pub fn min(a, b f64) f64 {
return b return b
} }
// Returns base raised to the provided power.
pub fn pow(a, b f64) f64 { pub fn pow(a, b f64) f64 {
return C.pow(a, b) return C.pow(a, b)
} }
// Radians conversion.
pub fn radians(degrees f64) f64 { pub fn radians(degrees f64) f64 {
return degrees * (Pi / 180.0) return degrees * (Pi / 180.0)
} }
// Degrees conversion.
pub fn degrees(radians f64) f64 { pub fn degrees(radians f64) f64 {
return radians * (180.0 / Pi) return radians * (180.0 / Pi)
} }
// Returns the integer nearest to the provided value.
pub fn round(f f64) f64 { pub fn round(f f64) f64 {
return C.round(f) return C.round(f)
} }
// Sine.
pub fn sin(a f64) f64 { pub fn sin(a f64) f64 {
return C.sin(a) return C.sin(a)
} }
// Hyperbolic sine.
pub fn sinh(a f64) f64 { pub fn sinh(a f64) f64 {
return C.sinh(a) return C.sinh(a)
} }
// Returns square of the provided value.
pub fn sqrt(a f64) f64 { pub fn sqrt(a f64) f64 {
return C.sqrt(a) return C.sqrt(a)
} }
// Tangent.
pub fn tan(a f64) f64 { pub fn tan(a f64) f64 {
return C.tan(a) return C.tan(a)
} }
// Hyperbolic tangent.
pub fn tanh(a f64) f64 { pub fn tanh(a f64) f64 {
return C.tanh(a) return C.tanh(a)
} }
// Rounds a toward zero, returning the nearest integral value that is not
// larger in magnitude than a.
pub fn trunc(a f64) f64 { pub fn trunc(a f64) f64 {
return C.trunc(a) return C.trunc(a)
} }
// Return the factorial of the value provided.
pub fn factorial(a int) i64 { pub fn factorial(a int) i64 {
mut prod := 1 mut prod := 1
for i:= 0; i < a; i++ { for i:= 0; i < a; i++ {