2 - Copyright (C) 2009-2010 Nick Bowler.
4 - License BSD2: 2-clause BSD license. See LICENSE for full terms.
5 - This is free software: you are free to change and redistribute it.
6 - There is NO WARRANTY, to the extent permitted by law.
9 -- | Bindings to the standard C math library.
10 {-# LANGUAGE ForeignFunctionInterface #-}
11 module Data
.Floating
.CMath
(
12 -- * Trigonometric functions
13 c_acos
, c_acosf
, c_asin
, c_asinf
, c_atan
, c_atanf
, c_atan2
, c_atan2f
,
14 c_cos
, c_cosf
, c_sin
, c_sinf
, c_tan
, c_tanf
,
16 -- * Hyperbolic functions
17 c_acosh
, c_acoshf
, c_asinh
, c_asinhf
, c_atanh
, c_atanhf
, c_cosh
, c_coshf
,
18 c_sinh
, c_sinhf
, c_tanh
, c_tanhf
,
20 -- * Exponential and logarithmic functions
21 c_exp
, c_expf
, c_exp2
, c_exp2f
, c_expm1
, c_expm1f
, c_frexp
, c_frexpf
,
22 c_ilogb
, c_ilogbf
, c_ldexp
, c_ldexpf
, c_log
, c_logf
, c_log10
, c_log10f
,
23 c_log1p
, c_log1pf
, c_log2
, c_log2f
, c_logb
, c_logbf
, c_modf
, c_modff
,
24 c_scalbn
, c_scalbnf
, c_scalbln
, c_scalblnf
,
26 -- * Power and absolute-value functions
27 c_cbrt
, c_cbrtf
, c_fabs
, c_fabsf
, c_hypot
, c_hypotf
, c_pow
, c_powf
, c_sqrt
,
30 -- * Remainder functions
31 c_fmod
, c_fmodf
, c_remainder
, c_remainderf
, c_remquo
, c_remquof
,
33 -- * Manipulation functions
34 c_copysign
, c_copysignf
, c_nan
, c_nanf
, c_nextafter
, c_nextafterf
,
36 -- * Error and gamma functions
37 c_erf
, c_erff
, c_erfc
, c_erfcf
, c_lgamma
, c_lgammaf
, c_tgamma
, c_tgammaf
,
39 -- * Nearest integer functions
40 c_ceil
, c_ceilf
, c_floor
, c_floorf
, c_nearbyint
, c_nearbyintf
, c_rint
,
41 c_rintf
, c_lrint
, c_lrintf
, c_llrint
, c_llrintf
, c_round
, c_roundf
,
42 c_lround
, c_lroundf
, c_llround
, c_llroundf
, c_trunc
, c_truncf
,
44 -- * Maximum, minimum, and positive difference functions
45 c_fdim
, c_fdimf
, c_fmax
, c_fmaxf
, c_fmin
, c_fminf
,
47 -- * Floating multiply-add
51 libmDouble
, libmFloat
, libmDouble2
, libmFloat2
, libmDouble3
, libmFloat3
54 import Prelude
hiding (Double, Float)
56 import Data
.Floating
.Types
60 libmDouble
:: (CDouble
-> CDouble
) -> Double -> Double
61 libmDouble f a
= toFloating
$ f
(toFloating a
)
63 libmFloat
:: (CFloat
-> CFloat
) -> Float -> Float
64 libmFloat f a
= toFloating
$ f
(toFloating a
)
66 libmDouble2
:: (CDouble
-> CDouble
-> CDouble
) -> Double -> Double -> Double
67 libmDouble2 f a b
= toFloating
$ f
(toFloating a
) (toFloating b
)
69 libmFloat2
:: (CFloat
-> CFloat
-> CFloat
) -> Float -> Float -> Float
70 libmFloat2 f a b
= toFloating
$ f
(toFloating a
) (toFloating b
)
72 libmDouble3
:: (CDouble
-> CDouble
-> CDouble
-> CDouble
)
73 -> Double -> Double -> Double -> Double
74 libmDouble3 f a b c
= toFloating
75 $ f
(toFloating a
) (toFloating b
) (toFloating c
)
77 libmFloat3
:: (CFloat
-> CFloat
-> CFloat
-> CFloat
)
78 -> Float -> Float -> Float -> Float
79 libmFloat3 f a b c
= toFloating
80 $ f
(toFloating a
) (toFloating b
) (toFloating c
)
82 -- 7.12.4 Trigonometric functions
83 foreign import ccall unsafe
"acos"
84 c_acos
:: CDouble
-> CDouble
85 foreign import ccall unsafe
"acosf"
86 c_acosf
:: CFloat
-> CFloat
87 foreign import ccall unsafe
"asin"
88 c_asin
:: CDouble
-> CDouble
89 foreign import ccall unsafe
"asinf"
90 c_asinf
:: CFloat
-> CFloat
91 foreign import ccall unsafe
"atan"
92 c_atan
:: CDouble
-> CDouble
93 foreign import ccall unsafe
"atanf"
94 c_atanf
:: CFloat
-> CFloat
95 foreign import ccall unsafe
"atan2"
96 c_atan2
:: CDouble
-> CDouble
-> CDouble
97 foreign import ccall unsafe
"atan2f"
98 c_atan2f
:: CFloat
-> CFloat
-> CFloat
99 foreign import ccall unsafe
"cos"
100 c_cos
:: CDouble
-> CDouble
101 foreign import ccall unsafe
"cosf"
102 c_cosf
:: CFloat
-> CFloat
103 foreign import ccall unsafe
"sin"
104 c_sin
:: CDouble
-> CDouble
105 foreign import ccall unsafe
"sinf"
106 c_sinf
:: CFloat
-> CFloat
107 foreign import ccall unsafe
"tan"
108 c_tan
:: CDouble
-> CDouble
109 foreign import ccall unsafe
"tanf"
110 c_tanf
:: CFloat
-> CFloat
112 -- 7.12.5 Hyperbolic functions
113 foreign import ccall unsafe
"acosh"
114 c_acosh
:: CDouble
-> CDouble
115 foreign import ccall unsafe
"acoshf"
116 c_acoshf
:: CFloat
-> CFloat
117 foreign import ccall unsafe
"asinh"
118 c_asinh
:: CDouble
-> CDouble
119 foreign import ccall unsafe
"asinhf"
120 c_asinhf
:: CFloat
-> CFloat
121 foreign import ccall unsafe
"atanh"
122 c_atanh
:: CDouble
-> CDouble
123 foreign import ccall unsafe
"atanhf"
124 c_atanhf
:: CFloat
-> CFloat
125 foreign import ccall unsafe
"cosh"
126 c_cosh
:: CDouble
-> CDouble
127 foreign import ccall unsafe
"coshf"
128 c_coshf
:: CFloat
-> CFloat
129 foreign import ccall unsafe
"sinh"
130 c_sinh
:: CDouble
-> CDouble
131 foreign import ccall unsafe
"sinhf"
132 c_sinhf
:: CFloat
-> CFloat
133 foreign import ccall unsafe
"tanh"
134 c_tanh
:: CDouble
-> CDouble
135 foreign import ccall unsafe
"tanhf"
136 c_tanhf
:: CFloat
-> CFloat
138 -- 7.12.6 Exponential and logarithmic functions
139 foreign import ccall unsafe
"exp"
140 c_exp
:: CDouble
-> CDouble
141 foreign import ccall unsafe
"expf"
142 c_expf
:: CFloat
-> CFloat
143 foreign import ccall unsafe
"exp2"
144 c_exp2
:: CDouble
-> CDouble
145 foreign import ccall unsafe
"exp2f"
146 c_exp2f
:: CFloat
-> CFloat
147 foreign import ccall unsafe
"expm1"
148 c_expm1
:: CDouble
-> CDouble
149 foreign import ccall unsafe
"expm1f"
150 c_expm1f
:: CFloat
-> CFloat
151 foreign import ccall unsafe
"frexp"
152 c_frexp
:: CDouble
-> Ptr CInt
-> IO CDouble
153 foreign import ccall unsafe
"frexpf"
154 c_frexpf
:: CFloat
-> Ptr CInt
-> IO CFloat
155 foreign import ccall unsafe
"ilogb"
156 c_ilogb
:: CDouble
-> CInt
157 foreign import ccall unsafe
"ilogbf"
158 c_ilogbf
:: CFloat
-> CInt
159 foreign import ccall unsafe
"ldexp"
160 c_ldexp
:: CDouble
-> CInt
-> CDouble
161 foreign import ccall unsafe
"ldexpf"
162 c_ldexpf
:: CFloat
-> CInt
-> CFloat
163 foreign import ccall unsafe
"log"
164 c_log
:: CDouble
-> CDouble
165 foreign import ccall unsafe
"logf"
166 c_logf
:: CFloat
-> CFloat
167 foreign import ccall unsafe
"log10"
168 c_log10
:: CDouble
-> CDouble
169 foreign import ccall unsafe
"log10f"
170 c_log10f
:: CFloat
-> CFloat
171 foreign import ccall unsafe
"log1p"
172 c_log1p
:: CDouble
-> CDouble
173 foreign import ccall unsafe
"log1pf"
174 c_log1pf
:: CFloat
-> CFloat
175 foreign import ccall unsafe
"log2"
176 c_log2
:: CDouble
-> CDouble
177 foreign import ccall unsafe
"log2f"
178 c_log2f
:: CFloat
-> CFloat
179 foreign import ccall unsafe
"logb"
180 c_logb
:: CDouble
-> CDouble
181 foreign import ccall unsafe
"logbf"
182 c_logbf
:: CFloat
-> CFloat
183 foreign import ccall unsafe
"modf"
184 c_modf
:: CDouble
-> Ptr CDouble
-> IO CDouble
185 foreign import ccall unsafe
"modff"
186 c_modff
:: CFloat
-> Ptr CFloat
-> IO CFloat
187 foreign import ccall unsafe
"scalbn"
188 c_scalbn
:: CDouble
-> CInt
-> CDouble
189 foreign import ccall unsafe
"scalbnf"
190 c_scalbnf
:: CFloat
-> CInt
-> CFloat
191 foreign import ccall unsafe
"scalbln"
192 c_scalbln
:: CDouble
-> CLong
-> CDouble
193 foreign import ccall unsafe
"scalblnf"
194 c_scalblnf
:: CFloat
-> CLong
-> CFloat
196 -- 7.12.7 Power and absolute-value functions
197 foreign import ccall unsafe
"cbrt"
198 c_cbrt
:: CDouble
-> CDouble
199 foreign import ccall unsafe
"cbrtf"
200 c_cbrtf
:: CFloat
-> CFloat
201 foreign import ccall unsafe
"fabs"
202 c_fabs
:: CDouble
-> CDouble
203 foreign import ccall unsafe
"fabsf"
204 c_fabsf
:: CFloat
-> CFloat
205 foreign import ccall unsafe
"hypot"
206 c_hypot
:: CDouble
-> CDouble
-> CDouble
207 foreign import ccall unsafe
"hypotf"
208 c_hypotf
:: CFloat
-> CFloat
-> CFloat
209 foreign import ccall unsafe
"pow"
210 c_pow
:: CDouble
-> CDouble
-> CDouble
211 foreign import ccall unsafe
"powf"
212 c_powf
:: CFloat
-> CFloat
-> CFloat
213 foreign import ccall unsafe
"sqrt"
214 c_sqrt
:: CDouble
-> CDouble
215 foreign import ccall unsafe
"sqrtf"
216 c_sqrtf
:: CFloat
-> CFloat
218 -- 7.12.8 Error and gamma functions
219 foreign import ccall unsafe
"erf"
220 c_erf
:: CDouble
-> CDouble
221 foreign import ccall unsafe
"erff"
222 c_erff
:: CFloat
-> CFloat
223 foreign import ccall unsafe
"erfc"
224 c_erfc
:: CDouble
-> CDouble
225 foreign import ccall unsafe
"erfcf"
226 c_erfcf
:: CFloat
-> CFloat
227 foreign import ccall unsafe
"lgamma"
228 c_lgamma
:: CDouble
-> CDouble
229 foreign import ccall unsafe
"lgammaf"
230 c_lgammaf
:: CFloat
-> CFloat
231 foreign import ccall unsafe
"tgamma"
232 c_tgamma
:: CDouble
-> CDouble
233 foreign import ccall unsafe
"tgammaf"
234 c_tgammaf
:: CFloat
-> CFloat
236 -- 7.12.9 Nearest integer functions
237 foreign import ccall unsafe
"ceil"
238 c_ceil
:: CDouble
-> CDouble
239 foreign import ccall unsafe
"ceilf"
240 c_ceilf
:: CFloat
-> CFloat
241 foreign import ccall unsafe
"floor"
242 c_floor
:: CDouble
-> CDouble
243 foreign import ccall unsafe
"floorf"
244 c_floorf
:: CFloat
-> CFloat
245 foreign import ccall unsafe
"nearbyint"
246 c_nearbyint
:: CDouble
-> CDouble
247 foreign import ccall unsafe
"nearbyintf"
248 c_nearbyintf
:: CFloat
-> CFloat
249 foreign import ccall unsafe
"rint"
250 c_rint
:: CDouble
-> CDouble
251 foreign import ccall unsafe
"rintf"
252 c_rintf
:: CFloat
-> CFloat
253 foreign import ccall unsafe
"lrint"
254 c_lrint
:: CDouble
-> CLong
255 foreign import ccall unsafe
"lrintf"
256 c_lrintf
:: CFloat
-> CLong
257 foreign import ccall unsafe
"llrint"
258 c_llrint
:: CDouble
-> CLLong
259 foreign import ccall unsafe
"llrintf"
260 c_llrintf
:: CFloat
-> CLLong
261 foreign import ccall unsafe
"round"
262 c_round
:: CDouble
-> CDouble
263 foreign import ccall unsafe
"roundf"
264 c_roundf
:: CFloat
-> CFloat
265 foreign import ccall unsafe
"lround"
266 c_lround
:: CDouble
-> CLong
267 foreign import ccall unsafe
"lroundf"
268 c_lroundf
:: CFloat
-> CLong
269 foreign import ccall unsafe
"llround"
270 c_llround
:: CDouble
-> CLLong
271 foreign import ccall unsafe
"llroundf"
272 c_llroundf
:: CFloat
-> CLLong
273 foreign import ccall unsafe
"trunc"
274 c_trunc
:: CDouble
-> CDouble
275 foreign import ccall unsafe
"truncf"
276 c_truncf
:: CFloat
-> CFloat
278 -- 7.12.10 Remainder functions
279 foreign import ccall unsafe
"fmod"
280 c_fmod
:: CDouble
-> CDouble
-> CDouble
281 foreign import ccall unsafe
"fmodf"
282 c_fmodf
:: CFloat
-> CFloat
-> CFloat
283 foreign import ccall unsafe
"remainder"
284 c_remainder
:: CDouble
-> CDouble
-> CDouble
285 foreign import ccall unsafe
"remainderf"
286 c_remainderf
:: CFloat
-> CFloat
-> CFloat
287 foreign import ccall unsafe
"remquo"
288 c_remquo
:: CDouble
-> CDouble
-> Ptr CInt
-> IO CDouble
289 foreign import ccall unsafe
"remquof"
290 c_remquof
:: CFloat
-> CFloat
-> Ptr CInt
-> IO CFloat
292 -- 7.12.11 Manipulation functions
293 foreign import ccall unsafe
"copysign"
294 c_copysign
:: CDouble
-> CDouble
-> CDouble
295 foreign import ccall unsafe
"copysignf"
296 c_copysignf
:: CFloat
-> CFloat
-> CFloat
297 foreign import ccall unsafe
"nan"
298 c_nan
:: CString
-> IO CDouble
299 foreign import ccall unsafe
"nanf"
300 c_nanf
:: CString
-> IO CFloat
301 foreign import ccall unsafe
"nextafter"
302 c_nextafter
:: CDouble
-> CDouble
-> CDouble
303 foreign import ccall unsafe
"nextafterf"
304 c_nextafterf
:: CFloat
-> CFloat
-> CFloat
305 -- no nexttoward until we have a long double type.
307 -- 7.12.12 Maximum, minimum, and positive difference functions
308 foreign import ccall unsafe
"fdim"
309 c_fdim
:: CDouble
-> CDouble
-> CDouble
310 foreign import ccall unsafe
"fdimf"
311 c_fdimf
:: CFloat
-> CFloat
-> CFloat
312 foreign import ccall unsafe
"fmax"
313 c_fmax
:: CDouble
-> CDouble
-> CDouble
314 foreign import ccall unsafe
"fmaxf"
315 c_fmaxf
:: CFloat
-> CFloat
-> CFloat
316 foreign import ccall unsafe
"fmin"
317 c_fmin
:: CDouble
-> CDouble
-> CDouble
318 foreign import ccall unsafe
"fminf"
319 c_fminf
:: CFloat
-> CFloat
-> CFloat
321 -- 7.12.13 Floating multiply-add
322 foreign import ccall unsafe
"fma"
323 c_fma
:: CDouble
-> CDouble
-> CDouble
-> CDouble
324 foreign import ccall unsafe
"fmaf"
325 c_fmaf
:: CFloat
-> CFloat
-> CFloat
-> CFloat