(index<- )        ./libstd/num/cmath.rs

   1  // Copyright 2012 The Rust Project Developers. See the COPYRIGHT
   2  // file at the top-level directory of this distribution and at
   3  // http://rust-lang.org/COPYRIGHT.
   4  //
   5  // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
   6  // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
   7  // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
   8  // option. This file may not be copied, modified, or distributed
   9  // except according to those terms.
  10  
  11  #[allow(missing_doc)];
  12  #[allow(dead_code)];
  13  
  14  //! Bindings for the C math library (for basic mathematic functions)
  15  
  16  // Function names are almost identical to C's libmath, a few have been
  17  // renamed, grep for "rename:"
  18  
  19  pub mod c_double {
  20      use libc::{c_double, c_int};
  21  
  22      #[link_name = "m"]
  23      extern {
  24          // Alphabetically sorted by link_name
  25  
  26          pub fn acos(nc_double) -> c_double;
  27          pub fn asin(nc_double) -> c_double;
  28          pub fn atan(nc_double) -> c_double;
  29          pub fn atan2(ac_double, bc_double) -> c_double;
  30          pub fn cbrt(nc_double) -> c_double;
  31          pub fn cosh(nc_double) -> c_double;
  32          pub fn erf(nc_double) -> c_double;
  33          pub fn erfc(nc_double) -> c_double;
  34          // rename: for consistency with underscore usage elsewhere
  35          #[link_name="expm1"]
  36          pub fn exp_m1(nc_double) -> c_double;
  37          // rename: for clarity and consistency with add/sub/mul/div
  38          #[link_name="fdim"]
  39          pub fn abs_sub(ac_double, bc_double) -> c_double;
  40          #[link_name="fmax"]
  41          pub fn fmax(ac_double, bc_double) -> c_double;
  42          #[link_name="fmin"]
  43          pub fn fmin(ac_double, bc_double) -> c_double;
  44          #[link_name="nextafter"]
  45          pub fn next_after(xc_double, yc_double) -> c_double;
  46          pub fn frexp(nc_double, value&mut c_int) -> c_double;
  47          pub fn hypot(xc_double, yc_double) -> c_double;
  48          pub fn ldexp(xc_double, nc_int) -> c_double;
  49          #[cfg(unix)]
  50          #[link_name="lgamma_r"]
  51          pub fn lgamma(nc_double, sign&mut c_int) -> c_double;
  52          #[cfg(windows)]
  53          #[link_name="__lgamma_r"]
  54          pub fn lgamma(n: c_double, sign: &mut c_int) -> c_double;
  55          // renamed: "logb" /often/ is confused for log2 by beginners
  56          #[link_name="logb"]
  57          pub fn log_radix(nc_double) -> c_double;
  58          // renamed: to be consitent with log as ln
  59          #[link_name="log1p"]
  60          pub fn ln_1p(nc_double) -> c_double;
  61          #[link_name="ilogb"]
  62          pub fn ilog_radix(nc_double) -> c_int;
  63          pub fn modf(nc_double, iptr&mut c_double) -> c_double;
  64          // rename: for consistency with logradix
  65          #[link_name="scalbn"]
  66          pub fn ldexp_radix(nc_double, ic_int) -> c_double;
  67          pub fn sinh(nc_double) -> c_double;
  68          pub fn tan(nc_double) -> c_double;
  69          pub fn tanh(nc_double) -> c_double;
  70          pub fn tgamma(nc_double) -> c_double;
  71  
  72          // These are commonly only available for doubles
  73  
  74          pub fn j0(nc_double) -> c_double;
  75          pub fn j1(nc_double) -> c_double;
  76          pub fn jn(ic_int, nc_double) -> c_double;
  77  
  78          pub fn y0(nc_double) -> c_double;
  79          pub fn y1(nc_double) -> c_double;
  80          pub fn yn(ic_int, nc_double) -> c_double;
  81      }
  82  }
  83  
  84  pub mod c_float {
  85      use libc::{c_float, c_int};
  86  
  87      #[link_name = "m"]
  88      extern {
  89          // Alphabetically sorted by link_name
  90  
  91          #[link_name="acosf"]
  92          pub fn acos(nc_float) -> c_float;
  93          #[link_name="asinf"]
  94          pub fn asin(nc_float) -> c_float;
  95          #[link_name="atanf"]
  96          pub fn atan(nc_float) -> c_float;
  97          #[link_name="atan2f"]
  98          pub fn atan2(ac_float, bc_float) -> c_float;
  99          #[link_name="cbrtf"]
 100          pub fn cbrt(nc_float) -> c_float;
 101          #[link_name="coshf"]
 102          pub fn cosh(nc_float) -> c_float;
 103          #[link_name="erff"]
 104          pub fn erf(nc_float) -> c_float;
 105          #[link_name="erfcf"]
 106          pub fn erfc(nc_float) -> c_float;
 107          #[link_name="expm1f"]
 108          pub fn exp_m1(nc_float) -> c_float;
 109          #[link_name="fdimf"]
 110          pub fn abs_sub(ac_float, bc_float) -> c_float;
 111          #[link_name="frexpf"]
 112          pub fn frexp(nc_float, value&mut c_int) -> c_float;
 113          #[link_name="fmaxf"]
 114          pub fn fmax(ac_float, bc_float) -> c_float;
 115          #[link_name="fminf"]
 116          pub fn fmin(ac_float, bc_float) -> c_float;
 117          #[link_name="nextafterf"]
 118          pub fn next_after(xc_float, yc_float) -> c_float;
 119          #[link_name="hypotf"]
 120          pub fn hypot(xc_float, yc_float) -> c_float;
 121          #[link_name="ldexpf"]
 122          pub fn ldexp(xc_float, nc_int) -> c_float;
 123  
 124          #[cfg(unix)]
 125          #[link_name="lgammaf_r"]
 126          pub fn lgamma(nc_float, sign&mut c_int) -> c_float;
 127  
 128          #[cfg(windows)]
 129          #[link_name="__lgammaf_r"]
 130          pub fn lgamma(n: c_float, sign: &mut c_int) -> c_float;
 131  
 132          #[link_name="logbf"]
 133          pub fn log_radix(nc_float) -> c_float;
 134          #[link_name="log1pf"]
 135          pub fn ln_1p(nc_float) -> c_float;
 136          #[link_name="ilogbf"]
 137          pub fn ilog_radix(nc_float) -> c_int;
 138          #[link_name="modff"]
 139          pub fn modf(nc_float, iptr&mut c_float) -> c_float;
 140          #[link_name="scalbnf"]
 141          pub fn ldexp_radix(nc_float, ic_int) -> c_float;
 142          #[link_name="sinhf"]
 143          pub fn sinh(nc_float) -> c_float;
 144          #[link_name="tanf"]
 145          pub fn tan(nc_float) -> c_float;
 146          #[link_name="tanhf"]
 147          pub fn tanh(nc_float) -> c_float;
 148          #[link_name="tgammaf"]
 149          pub fn tgamma(nc_float) -> c_float;
 150      }
 151  }