futhark-0.22.2: src/Futhark/Util/CMath.hs
-- | Bindings to the C math library.
--
-- Follows the naming scheme of the C functions when feasible.
module Futhark.Util.CMath
( roundFloat,
ceilFloat,
floorFloat,
roundDouble,
ceilDouble,
floorDouble,
nextafterf,
nextafter,
lgamma,
lgammaf,
tgamma,
tgammaf,
erf,
erff,
erfc,
erfcf,
cbrt,
cbrtf,
hypot,
hypotf,
)
where
foreign import ccall "nearbyint" c_nearbyint :: Double -> Double
foreign import ccall "nearbyintf" c_nearbyintf :: Float -> Float
foreign import ccall "ceil" c_ceil :: Double -> Double
foreign import ccall "ceilf" c_ceilf :: Float -> Float
foreign import ccall "floor" c_floor :: Double -> Double
foreign import ccall "floorf" c_floorf :: Float -> Float
-- | Round a single-precision floating point number correctly.
roundFloat :: Float -> Float
roundFloat = c_nearbyintf
-- | Round a single-precision floating point number upwards correctly.
ceilFloat :: Float -> Float
ceilFloat = c_ceilf
-- | Round a single-precision floating point number downwards correctly.
floorFloat :: Float -> Float
floorFloat = c_floorf
-- | Round a double-precision floating point number correctly.
roundDouble :: Double -> Double
roundDouble = c_nearbyint
-- | Round a double-precision floating point number upwards correctly.
ceilDouble :: Double -> Double
ceilDouble = c_ceil
-- | Round a double-precision floating point number downwards correctly.
floorDouble :: Double -> Double
floorDouble = c_floor
foreign import ccall "nextafter" c_nextafter :: Double -> Double -> Double
foreign import ccall "nextafterf" c_nextafterf :: Float -> Float -> Float
-- | The next representable single-precision floating-point value in
-- the given direction.
nextafterf :: Float -> Float -> Float
nextafterf = c_nextafterf
-- | The next representable double-precision floating-point value in
-- the given direction.
nextafter :: Double -> Double -> Double
nextafter = c_nextafter
foreign import ccall "lgamma" c_lgamma :: Double -> Double
foreign import ccall "lgammaf" c_lgammaf :: Float -> Float
foreign import ccall "tgamma" c_tgamma :: Double -> Double
foreign import ccall "tgammaf" c_tgammaf :: Float -> Float
-- | The system-level @lgamma()@ function.
lgamma :: Double -> Double
lgamma = c_lgamma
-- | The system-level @lgammaf()@ function.
lgammaf :: Float -> Float
lgammaf = c_lgammaf
-- | The system-level @tgamma()@ function.
tgamma :: Double -> Double
tgamma = c_tgamma
-- | The system-level @tgammaf()@ function.
tgammaf :: Float -> Float
tgammaf = c_tgammaf
foreign import ccall "hypot" c_hypot :: Double -> Double -> Double
foreign import ccall "hypotf" c_hypotf :: Float -> Float -> Float
-- | The system-level @hypot@ function.
hypot :: Double -> Double -> Double
hypot = c_hypot
-- | The system-level @hypotf@ function.
hypotf :: Float -> Float -> Float
hypotf = c_hypotf
foreign import ccall "erf" c_erf :: Double -> Double
foreign import ccall "erff" c_erff :: Float -> Float
foreign import ccall "erfc" c_erfc :: Double -> Double
foreign import ccall "erfcf" c_erfcf :: Float -> Float
-- | The system-level @erf()@ function.
erf :: Double -> Double
erf = c_erf
-- | The system-level @erff()@ function.
erff :: Float -> Float
erff = c_erff
-- | The system-level @erfc()@ function.
erfc :: Double -> Double
erfc = c_erfc
-- | The system-level @erfcf()@ function.
erfcf :: Float -> Float
erfcf = c_erfcf
foreign import ccall "cbrt" c_cbrt :: Double -> Double
foreign import ccall "cbrtf" c_cbrtf :: Float -> Float
-- | The system-level @cbrt@ function.
cbrt :: Double -> Double
cbrt = c_cbrt
-- | The system-level @cbrtf@ function.
cbrtf :: Float -> Float
cbrtf = c_cbrtf