From 53ad5013a6108172a7759e3f73c1dbd0f4f62e08 Mon Sep 17 00:00:00 2001 From: Jason Travis Smith Date: Thu, 22 Jun 2017 18:25:07 -0400 Subject: [PATCH] Most of the math functions are now defined. --- src/c/math.rs | 102 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 80 insertions(+), 22 deletions(-) diff --git a/src/c/math.rs b/src/c/math.rs index c5bbcd0..3d6cb69 100644 --- a/src/c/math.rs +++ b/src/c/math.rs @@ -1,29 +1,87 @@ -use binding::{CDouble, CInt}; - +use binding::{CFloat, CDouble, CInt}; +// Taken from: https://en.wikipedia.org/wiki/C_mathematical_functions #[link(name="m")] extern { - pub fn acos(x: CDouble) -> CDouble; - pub fn asin(x: CDouble) -> CDouble; - pub fn atan(x: CDouble) -> CDouble; - pub fn atan2(y: CDouble, x: CDouble) -> CDouble; - pub fn cos(x: CDouble) -> CDouble; - pub fn cosh(x: CDouble) -> CDouble; - pub fn sin(x: CDouble) -> CDouble; - pub fn sinh(x: CDouble) -> CDouble; - pub fn tanh(x: CDouble) -> CDouble; - pub fn exp(x: CDouble) -> CDouble; - pub fn frexp(x: CDouble, exponent: *mut CInt) -> CDouble; - pub fn ldexp(x: CDouble, exponent: CInt) -> CDouble; - pub fn log(x: CDouble)-> CDouble; - pub fn log10(x: CDouble)-> CDouble; - pub fn modf(x: CDouble, integer: *mut CInt)-> CDouble; - pub fn pow(x: CDouble, y: CDouble) -> CDouble; - pub fn sqrt(x: CDouble) -> CDouble; - pub fn ceil(x: CDouble) -> CDouble; - pub fn fabs(x: CDouble) -> CDouble; - pub fn floor(x: CDouble) -> CDouble; + // Basic functions. + pub fn fabs(arg: CDouble) -> CDouble; pub fn fmod(x: CDouble, y: CDouble) -> CDouble; + pub fn fabsf(arg: CFloat) -> CFloat; + pub fn fmodf(x: CFloat, y: CFloat) -> CFloat; + + // Nearest integer floating point functions. + pub fn ceil(arg: CDouble) -> CDouble; + pub fn floor(arg: CDouble) -> CDouble; + pub fn ceilf(arg: CFloat) -> CFloat; + pub fn floorf(arg: CFloat) -> CFloat; + + // Trigonometric functions. + pub fn cos(arg: CDouble) -> CDouble; + pub fn sin(arg: CDouble) -> CDouble; + pub fn tan(arg: CDouble) -> CDouble; + pub fn acos(arg: CDouble) -> CDouble; + pub fn asin(arg: CDouble) -> CDouble; + pub fn atan(arg: CDouble) -> CDouble; + pub fn atan2(y: CDouble, x: CDouble) -> CDouble; + pub fn cosf(arg: CFloat) -> CFloat; + pub fn sinf(arg: CFloat) -> CFloat; + pub fn tanf(arg: CFloat) -> CFloat; + pub fn acosf(arg: CFloat) -> CFloat; + pub fn asinf(arg: CFloat) -> CFloat; + pub fn atanf(arg: CFloat) -> CFloat; + pub fn atan2f(y: CFloat, x: CFloat) -> CFloat; + + // Hyperbolic functions. + pub fn cosh(arg: CDouble) -> CDouble; + pub fn sinh(arg: CDouble) -> CDouble; + pub fn tanh(arg: CDouble) -> CDouble; + pub fn acosh(arg: CDouble) -> CDouble; + pub fn asinh(arg: CDouble) -> CDouble; + pub fn atanh(arg: CDouble) -> CDouble; + pub fn coshf(arg: CFloat) -> CFloat; + pub fn sinhf(arg: CFloat) -> CFloat; + pub fn tanhf(arg: CFloat) -> CFloat; + pub fn acoshf(arg: CFloat) -> CFloat; + pub fn asinhf(arg: CFloat) -> CFloat; + pub fn atanhf(arg: CFloat) -> CFloat; + + // Exponential functions. + pub fn exp(arg: CDouble) -> CDouble; + pub fn exp2(arg: CDouble) -> CDouble; + pub fn expm1(arg: CDouble) -> CDouble; + pub fn log(arg: CDouble) -> CDouble; + pub fn log2(arg: CDouble) -> CDouble; + pub fn log10(arg: CDouble) -> CDouble; + pub fn log1p(arg: CDouble) -> CDouble; + pub fn logb(arg: CDouble) -> CDouble; + pub fn ilogb(arg: CDouble) -> CInt; + pub fn expf(arg: CFloat) -> CFloat; + pub fn exp2f(arg: CFloat) -> CFloat; + pub fn expm1f(arg: CFloat) -> CFloat; + pub fn logf(arg: CFloat) -> CFloat; + pub fn log2f(arg: CFloat) -> CFloat; + pub fn log10f(arg: CFloat) -> CFloat; + pub fn log1pf(arg: CFloat) -> CFloat; + pub fn logbf(arg: CFloat) -> CFloat; + pub fn ilogbf(arg: CFloat) -> CInt; + + // Power functions. + pub fn cbrt(arg: CDouble) -> CDouble; + pub fn hypot(x: CDouble, y: CDouble) -> CDouble; + pub fn pow(base: CDouble, exponent: CDouble) -> CDouble; + pub fn sqrt(arg: CDouble) -> CDouble; + pub fn cbrtf(arg: CFloat) -> CFloat; + pub fn hypotf(x: CFloat, y: CFloat) -> CFloat; + pub fn powf(base: CFloat, exponent: CFloat) -> CFloat; + pub fn sqrtf(arg: CFloat) -> CFloat; + + // Floating point manipulation functions. + pub fn frexp(arg: CDouble, exp: *mut CInt) -> CDouble; + pub fn ldexp(arg: CDouble, exp: CInt) -> CDouble; + pub fn modf(arg: CDouble, integer: *mut CInt)-> CDouble; + pub fn frexpf(arg: CFloat, exp: *mut CInt) -> CFloat; + pub fn ldexpf(arg: CFloat, exp: CInt) -> CFloat; + pub fn modff(arg: CFloat, integer: *mut CInt)-> CFloat; }