Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- d_randtest :: Ptr CFRandState -> IO CDouble
- d_randtest_signed :: Ptr CFRandState -> CLong -> CLong -> IO CDouble
- d_randtest_special :: Ptr CFRandState -> CLong -> CLong -> IO CDouble
- d_polyval :: Ptr CDouble -> CInt -> CDouble -> IO CDouble
- d_lambertw :: CDouble -> IO CDouble
- d_is_nan :: CDouble -> IO CInt
- d_log2 :: CDouble -> IO CDouble
Support functions for double arithmetic
Random functions
d_randtest :: Ptr CFRandState -> IO CDouble Source #
d_randtest state
Returns a random number in the interval \([0.5, 1)\).
d_randtest_signed :: Ptr CFRandState -> CLong -> CLong -> IO CDouble Source #
d_randtest_signed state minexp maxexp
Returns a random signed number with exponent between minexp
and
maxexp
or zero.
d_randtest_special :: Ptr CFRandState -> CLong -> CLong -> IO CDouble Source #
d_randtest_special state minexp maxexp
Returns a random signed number with exponent between minexp
and
maxexp
, zero, D_NAN
or \(\pm\)D_INF
.
Arithmetic
d_polyval :: Ptr CDouble -> CInt -> CDouble -> IO CDouble Source #
d_polyval poly len x
Uses Horner's rule to evaluate the polynomial defined by the given
len
coefficients. Requires that len
is nonzero.
Special functions
d_lambertw :: CDouble -> IO CDouble Source #
d_lambertw x
Computes the principal branch of the Lambert W function, solving the equation \(x = W(x) \exp(W(x))\). If \(x < -1/e\), the solution is complex, and NaN is returned.
Depending on the magnitude of \(x\), we start from a piecewise rational approximation or a zeroth-order truncation of the asymptotic expansion at infinity, and perform 0, 1 or 2 iterations with Halley's method to obtain full accuracy.
A test of \(10^7\) random inputs showed a maximum relative error smaller
than 0.95 times DBL_EPSILON
(2^{-52}) for positive \(x\). Accuracy for
negative \(x\) is slightly worse, and can grow to about 10 times
DBL_EPSILON
close to \(-1/e\). However, accuracy may be worse
depending on compiler flags and the accuracy of the system libm
functions.