Skip to main content

c_compat/
math.rs

1//! math.h Rust implementations
2
3use core::ffi::c_double;
4use core::ffi::c_float;
5
6#[unsafe(no_mangle)]
7pub extern "C" fn fabs(arg: c_double) -> c_double {
8    arg.abs()
9}
10
11#[unsafe(no_mangle)]
12pub extern "C" fn fabsf(arg: c_float) -> c_float {
13    arg.abs()
14}
15
16#[unsafe(no_mangle)]
17pub extern "C" fn fmin(x: c_double, y: c_double) -> c_double {
18    x.min(y)
19}
20
21#[unsafe(no_mangle)]
22pub extern "C" fn fminf(x: c_float, y: c_float) -> c_float {
23    x.min(y)
24}
25
26#[unsafe(no_mangle)]
27pub extern "C" fn fmax(x: c_double, y: c_double) -> c_double {
28    x.max(y)
29}
30
31#[unsafe(no_mangle)]
32pub extern "C" fn fmaxf(x: c_float, y: c_float) -> c_float {
33    x.max(y)
34}
35
36#[unsafe(no_mangle)]
37pub extern "C" fn ceil(x: c_double) -> c_double {
38    libm::ceil(x)
39}
40
41#[unsafe(no_mangle)]
42pub extern "C" fn ceilf(x: c_float) -> c_float {
43    libm::ceilf(x)
44}
45
46#[unsafe(no_mangle)]
47pub extern "C" fn floor(x: c_double) -> c_double {
48    libm::floor(x)
49}
50
51#[unsafe(no_mangle)]
52pub extern "C" fn floorf(x: c_float) -> c_float {
53    libm::floorf(x)
54}
55
56#[unsafe(no_mangle)]
57pub extern "C" fn trunc(x: c_double) -> c_double {
58    libm::trunc(x)
59}
60
61#[unsafe(no_mangle)]
62pub extern "C" fn truncf(x: c_float) -> c_float {
63    libm::truncf(x)
64}
65
66#[unsafe(no_mangle)]
67pub extern "C" fn rint(x: c_double) -> c_double {
68    libm::rint(x)
69}
70
71#[unsafe(no_mangle)]
72pub extern "C" fn rintf(x: c_float) -> c_float {
73    libm::rintf(x)
74}
75
76#[unsafe(no_mangle)]
77pub extern "C" fn isnan_f32(x: c_float) -> bool {
78    x.is_nan()
79}
80
81#[unsafe(no_mangle)]
82pub extern "C" fn isnan_f64(x: c_double) -> bool {
83    x.is_nan()
84}
85
86#[unsafe(no_mangle)]
87pub extern "C" fn signbit_f32(x: c_float) -> bool {
88    x.is_sign_negative()
89}
90
91#[unsafe(no_mangle)]
92pub extern "C" fn signbit_f64(x: c_double) -> bool {
93    x.is_sign_negative()
94}