1use core::marker::PhantomData;
2
3use crate::*;
4
5pub struct Libm<T>(PhantomData<T>);
23
24macro_rules! libm_helper {
25 ($t:ident, funcs: $funcs:tt) => {
26 impl Libm<$t> {
27 #![allow(unused_parens)]
28
29 libm_helper! { $funcs }
30 }
31 };
32
33 ({$($func:tt;)*}) => {
34 $(
35 libm_helper! { $func }
36 )*
37 };
38
39 ((fn $func:ident($($arg:ident: $arg_typ:ty),*) -> ($($ret_typ:ty),*); => $libm_fn:ident)) => {
40 #[inline(always)]
41 pub fn $func($($arg: $arg_typ),*) -> ($($ret_typ),*) {
42 $libm_fn($($arg),*)
43 }
44 };
45}
46
47impl Libm<f32> {
#![allow(unused_parens)]
#[inline(always)]
pub fn acos(x: f32) -> (f32) { acosf(x) }
#[inline(always)]
pub fn acosh(x: f32) -> (f32) { acoshf(x) }
#[inline(always)]
pub fn asin(x: f32) -> (f32) { asinf(x) }
#[inline(always)]
pub fn asinh(x: f32) -> (f32) { asinhf(x) }
#[inline(always)]
pub fn atan(x: f32) -> (f32) { atanf(x) }
#[inline(always)]
pub fn atan2(y: f32, x: f32) -> (f32) { atan2f(y, x) }
#[inline(always)]
pub fn atanh(x: f32) -> (f32) { atanhf(x) }
#[inline(always)]
pub fn cbrt(x: f32) -> (f32) { cbrtf(x) }
#[inline(always)]
pub fn ceil(x: f32) -> (f32) { ceilf(x) }
#[inline(always)]
pub fn copysign(x: f32, y: f32) -> (f32) { copysignf(x, y) }
#[inline(always)]
pub fn cos(x: f32) -> (f32) { cosf(x) }
#[inline(always)]
pub fn cosh(x: f32) -> (f32) { coshf(x) }
#[inline(always)]
pub fn erf(x: f32) -> (f32) { erff(x) }
#[inline(always)]
pub fn erfc(x: f32) -> (f32) { erfcf(x) }
#[inline(always)]
pub fn exp(x: f32) -> (f32) { expf(x) }
#[inline(always)]
pub fn exp10(x: f32) -> (f32) { exp10f(x) }
#[inline(always)]
pub fn exp2(x: f32) -> (f32) { exp2f(x) }
#[inline(always)]
pub fn expm1(x: f32) -> (f32) { expm1f(x) }
#[inline(always)]
pub fn fabs(x: f32) -> (f32) { fabsf(x) }
#[inline(always)]
pub fn fdim(x: f32, y: f32) -> (f32) { fdimf(x, y) }
#[inline(always)]
pub fn floor(x: f32) -> (f32) { floorf(x) }
#[inline(always)]
pub fn fma(x: f32, y: f32, z: f32) -> (f32) { fmaf(x, y, z) }
#[inline(always)]
pub fn fmax(x: f32, y: f32) -> (f32) { fmaxf(x, y) }
#[inline(always)]
pub fn fmin(x: f32, y: f32) -> (f32) { fminf(x, y) }
#[inline(always)]
pub fn fmod(x: f32, y: f32) -> (f32) { fmodf(x, y) }
#[inline(always)]
pub fn frexp(x: f32) -> (f32, i32) { frexpf(x) }
#[inline(always)]
pub fn hypot(x: f32, y: f32) -> (f32) { hypotf(x, y) }
#[inline(always)]
pub fn ilogb(x: f32) -> (i32) { ilogbf(x) }
#[inline(always)]
pub fn j0(x: f32) -> (f32) { j0f(x) }
#[inline(always)]
pub fn j1(x: f32) -> (f32) { j1f(x) }
#[inline(always)]
pub fn jn(n: i32, x: f32) -> (f32) { jnf(n, x) }
#[inline(always)]
pub fn ldexp(x: f32, n: i32) -> (f32) { ldexpf(x, n) }
#[inline(always)]
pub fn lgamma(x: f32) -> (f32) { lgammaf(x) }
#[inline(always)]
pub fn lgamma_r(x: f32) -> (f32, i32) { lgammaf_r(x) }
#[inline(always)]
pub fn log(x: f32) -> (f32) { logf(x) }
#[inline(always)]
pub fn log10(x: f32) -> (f32) { log10f(x) }
#[inline(always)]
pub fn log1p(x: f32) -> (f32) { log1pf(x) }
#[inline(always)]
pub fn log2(x: f32) -> (f32) { log2f(x) }
#[inline(always)]
pub fn modf(x: f32) -> (f32, f32) { modff(x) }
#[inline(always)]
pub fn nextafter(x: f32, y: f32) -> (f32) { nextafterf(x, y) }
#[inline(always)]
pub fn pow(x: f32, y: f32) -> (f32) { powf(x, y) }
#[inline(always)]
pub fn remainder(x: f32, y: f32) -> (f32) { remainderf(x, y) }
#[inline(always)]
pub fn remquo(x: f32, y: f32) -> (f32, i32) { remquof(x, y) }
#[inline(always)]
pub fn rint(x: f32) -> (f32) { rintf(x) }
#[inline(always)]
pub fn round(x: f32) -> (f32) { roundf(x) }
#[inline(always)]
pub fn roundeven(x: f32) -> (f32) { roundevenf(x) }
#[inline(always)]
pub fn scalbn(x: f32, n: i32) -> (f32) { scalbnf(x, n) }
#[inline(always)]
pub fn sin(x: f32) -> (f32) { sinf(x) }
#[inline(always)]
pub fn sincos(x: f32) -> (f32, f32) { sincosf(x) }
#[inline(always)]
pub fn sinh(x: f32) -> (f32) { sinhf(x) }
#[inline(always)]
pub fn sqrt(x: f32) -> (f32) { sqrtf(x) }
#[inline(always)]
pub fn tan(x: f32) -> (f32) { tanf(x) }
#[inline(always)]
pub fn tanh(x: f32) -> (f32) { tanhf(x) }
#[inline(always)]
pub fn tgamma(x: f32) -> (f32) { tgammaf(x) }
#[inline(always)]
pub fn trunc(x: f32) -> (f32) { truncf(x) }
#[inline(always)]
pub fn y0(x: f32) -> (f32) { y0f(x) }
#[inline(always)]
pub fn y1(x: f32) -> (f32) { y1f(x) }
#[inline(always)]
pub fn yn(n: i32, x: f32) -> (f32) { ynf(n, x) }
}libm_helper! {
49 f32,
50 funcs: {
51 (fn acos(x: f32) -> (f32); => acosf);
53 (fn acosh(x: f32) -> (f32); => acoshf);
54 (fn asin(x: f32) -> (f32); => asinf);
55 (fn asinh(x: f32) -> (f32); => asinhf);
56 (fn atan(x: f32) -> (f32); => atanf);
57 (fn atan2(y: f32, x: f32) -> (f32); => atan2f);
58 (fn atanh(x: f32) -> (f32); => atanhf);
59 (fn cbrt(x: f32) -> (f32); => cbrtf);
60 (fn ceil(x: f32) -> (f32); => ceilf);
61 (fn copysign(x: f32, y: f32) -> (f32); => copysignf);
62 (fn cos(x: f32) -> (f32); => cosf);
63 (fn cosh(x: f32) -> (f32); => coshf);
64 (fn erf(x: f32) -> (f32); => erff);
65 (fn erfc(x: f32) -> (f32); => erfcf);
66 (fn exp(x: f32) -> (f32); => expf);
67 (fn exp10(x: f32) -> (f32); => exp10f);
68 (fn exp2(x: f32) -> (f32); => exp2f);
69 (fn expm1(x: f32) -> (f32); => expm1f);
70 (fn fabs(x: f32) -> (f32); => fabsf);
71 (fn fdim(x: f32, y: f32) -> (f32); => fdimf);
72 (fn floor(x: f32) -> (f32); => floorf);
73 (fn fma(x: f32, y: f32, z: f32) -> (f32); => fmaf);
74 (fn fmax(x: f32, y: f32) -> (f32); => fmaxf);
75 (fn fmin(x: f32, y: f32) -> (f32); => fminf);
76 (fn fmod(x: f32, y: f32) -> (f32); => fmodf);
77 (fn frexp(x: f32) -> (f32, i32); => frexpf);
78 (fn hypot(x: f32, y: f32) -> (f32); => hypotf);
79 (fn ilogb(x: f32) -> (i32); => ilogbf);
80 (fn j0(x: f32) -> (f32); => j0f);
81 (fn j1(x: f32) -> (f32); => j1f);
82 (fn jn(n: i32, x: f32) -> (f32); => jnf);
83 (fn ldexp(x: f32, n: i32) -> (f32); => ldexpf);
84 (fn lgamma(x: f32) -> (f32); => lgammaf);
85 (fn lgamma_r(x: f32) -> (f32, i32); => lgammaf_r);
86 (fn log(x: f32) -> (f32); => logf);
87 (fn log10(x: f32) -> (f32); => log10f);
88 (fn log1p(x: f32) -> (f32); => log1pf);
89 (fn log2(x: f32) -> (f32); => log2f);
90 (fn modf(x: f32) -> (f32, f32); => modff);
91 (fn nextafter(x: f32, y: f32) -> (f32); => nextafterf);
92 (fn pow(x: f32, y: f32) -> (f32); => powf);
93 (fn remainder(x: f32, y: f32) -> (f32); => remainderf);
94 (fn remquo(x: f32, y: f32) -> (f32, i32); => remquof);
95 (fn rint(x: f32) -> (f32); => rintf);
96 (fn round(x: f32) -> (f32); => roundf);
97 (fn roundeven(x: f32) -> (f32); => roundevenf);
98 (fn scalbn(x: f32, n: i32) -> (f32); => scalbnf);
99 (fn sin(x: f32) -> (f32); => sinf);
100 (fn sincos(x: f32) -> (f32, f32); => sincosf);
101 (fn sinh(x: f32) -> (f32); => sinhf);
102 (fn sqrt(x: f32) -> (f32); => sqrtf);
103 (fn tan(x: f32) -> (f32); => tanf);
104 (fn tanh(x: f32) -> (f32); => tanhf);
105 (fn tgamma(x: f32) -> (f32); => tgammaf);
106 (fn trunc(x: f32) -> (f32); => truncf);
107 (fn y0(x: f32) -> (f32); => y0f);
108 (fn y1(x: f32) -> (f32); => y1f);
109 (fn yn(n: i32, x: f32) -> (f32); => ynf);
110 }
112}
113
114impl Libm<f64> {
#![allow(unused_parens)]
#[inline(always)]
pub fn acos(x: f64) -> (f64) { acos(x) }
#[inline(always)]
pub fn acosh(x: f64) -> (f64) { acosh(x) }
#[inline(always)]
pub fn asin(x: f64) -> (f64) { asin(x) }
#[inline(always)]
pub fn asinh(x: f64) -> (f64) { asinh(x) }
#[inline(always)]
pub fn atan(x: f64) -> (f64) { atan(x) }
#[inline(always)]
pub fn atan2(y: f64, x: f64) -> (f64) { atan2(y, x) }
#[inline(always)]
pub fn atanh(x: f64) -> (f64) { atanh(x) }
#[inline(always)]
pub fn cbrt(x: f64) -> (f64) { cbrt(x) }
#[inline(always)]
pub fn ceil(x: f64) -> (f64) { ceil(x) }
#[inline(always)]
pub fn copysign(x: f64, y: f64) -> (f64) { copysign(x, y) }
#[inline(always)]
pub fn cos(x: f64) -> (f64) { cos(x) }
#[inline(always)]
pub fn cosh(x: f64) -> (f64) { cosh(x) }
#[inline(always)]
pub fn erf(x: f64) -> (f64) { erf(x) }
#[inline(always)]
pub fn erfc(x: f64) -> (f64) { erfc(x) }
#[inline(always)]
pub fn exp(x: f64) -> (f64) { exp(x) }
#[inline(always)]
pub fn exp10(x: f64) -> (f64) { exp10(x) }
#[inline(always)]
pub fn exp2(x: f64) -> (f64) { exp2(x) }
#[inline(always)]
pub fn expm1(x: f64) -> (f64) { expm1(x) }
#[inline(always)]
pub fn fabs(x: f64) -> (f64) { fabs(x) }
#[inline(always)]
pub fn fdim(x: f64, y: f64) -> (f64) { fdim(x, y) }
#[inline(always)]
pub fn floor(x: f64) -> (f64) { floor(x) }
#[inline(always)]
pub fn fma(x: f64, y: f64, z: f64) -> (f64) { fma(x, y, z) }
#[inline(always)]
pub fn fmax(x: f64, y: f64) -> (f64) { fmax(x, y) }
#[inline(always)]
pub fn fmaximum(x: f64, y: f64) -> (f64) { fmaximum(x, y) }
#[inline(always)]
pub fn fmaximum_num(x: f64, y: f64) -> (f64) { fmaximum_num(x, y) }
#[inline(always)]
pub fn fmaximum_numf(x: f32, y: f32) -> (f32) { fmaximum_numf(x, y) }
#[inline(always)]
pub fn fmaximumf(x: f32, y: f32) -> (f32) { fmaximumf(x, y) }
#[inline(always)]
pub fn fmin(x: f64, y: f64) -> (f64) { fmin(x, y) }
#[inline(always)]
pub fn fminimum(x: f64, y: f64) -> (f64) { fminimum(x, y) }
#[inline(always)]
pub fn fminimum_num(x: f64, y: f64) -> (f64) { fminimum_num(x, y) }
#[inline(always)]
pub fn fminimum_numf(x: f32, y: f32) -> (f32) { fminimum_numf(x, y) }
#[inline(always)]
pub fn fminimumf(x: f32, y: f32) -> (f32) { fminimumf(x, y) }
#[inline(always)]
pub fn fmod(x: f64, y: f64) -> (f64) { fmod(x, y) }
#[inline(always)]
pub fn frexp(x: f64) -> (f64, i32) { frexp(x) }
#[inline(always)]
pub fn hypot(x: f64, y: f64) -> (f64) { hypot(x, y) }
#[inline(always)]
pub fn ilogb(x: f64) -> (i32) { ilogb(x) }
#[inline(always)]
pub fn j0(x: f64) -> (f64) { j0(x) }
#[inline(always)]
pub fn j1(x: f64) -> (f64) { j1(x) }
#[inline(always)]
pub fn jn(n: i32, x: f64) -> (f64) { jn(n, x) }
#[inline(always)]
pub fn ldexp(x: f64, n: i32) -> (f64) { ldexp(x, n) }
#[inline(always)]
pub fn lgamma(x: f64) -> (f64) { lgamma(x) }
#[inline(always)]
pub fn lgamma_r(x: f64) -> (f64, i32) { lgamma_r(x) }
#[inline(always)]
pub fn log(x: f64) -> (f64) { log(x) }
#[inline(always)]
pub fn log10(x: f64) -> (f64) { log10(x) }
#[inline(always)]
pub fn log1p(x: f64) -> (f64) { log1p(x) }
#[inline(always)]
pub fn log2(x: f64) -> (f64) { log2(x) }
#[inline(always)]
pub fn modf(x: f64) -> (f64, f64) { modf(x) }
#[inline(always)]
pub fn nextafter(x: f64, y: f64) -> (f64) { nextafter(x, y) }
#[inline(always)]
pub fn pow(x: f64, y: f64) -> (f64) { pow(x, y) }
#[inline(always)]
pub fn remainder(x: f64, y: f64) -> (f64) { remainder(x, y) }
#[inline(always)]
pub fn remquo(x: f64, y: f64) -> (f64, i32) { remquo(x, y) }
#[inline(always)]
pub fn rint(x: f64) -> (f64) { rint(x) }
#[inline(always)]
pub fn round(x: f64) -> (f64) { round(x) }
#[inline(always)]
pub fn roundevem(x: f64) -> (f64) { roundeven(x) }
#[inline(always)]
pub fn scalbn(x: f64, n: i32) -> (f64) { scalbn(x, n) }
#[inline(always)]
pub fn sin(x: f64) -> (f64) { sin(x) }
#[inline(always)]
pub fn sincos(x: f64) -> (f64, f64) { sincos(x) }
#[inline(always)]
pub fn sinh(x: f64) -> (f64) { sinh(x) }
#[inline(always)]
pub fn sqrt(x: f64) -> (f64) { sqrt(x) }
#[inline(always)]
pub fn tan(x: f64) -> (f64) { tan(x) }
#[inline(always)]
pub fn tanh(x: f64) -> (f64) { tanh(x) }
#[inline(always)]
pub fn tgamma(x: f64) -> (f64) { tgamma(x) }
#[inline(always)]
pub fn trunc(x: f64) -> (f64) { trunc(x) }
#[inline(always)]
pub fn y0(x: f64) -> (f64) { y0(x) }
#[inline(always)]
pub fn y1(x: f64) -> (f64) { y1(x) }
#[inline(always)]
pub fn yn(n: i32, x: f64) -> (f64) { yn(n, x) }
}libm_helper! {
115 f64,
116 funcs: {
117 (fn acos(x: f64) -> (f64); => acos);
119 (fn acosh(x: f64) -> (f64); => acosh);
120 (fn asin(x: f64) -> (f64); => asin);
121 (fn asinh(x: f64) -> (f64); => asinh);
122 (fn atan(x: f64) -> (f64); => atan);
123 (fn atan2(y: f64, x: f64) -> (f64); => atan2);
124 (fn atanh(x: f64) -> (f64); => atanh);
125 (fn cbrt(x: f64) -> (f64); => cbrt);
126 (fn ceil(x: f64) -> (f64); => ceil);
127 (fn copysign(x: f64, y: f64) -> (f64); => copysign);
128 (fn cos(x: f64) -> (f64); => cos);
129 (fn cosh(x: f64) -> (f64); => cosh);
130 (fn erf(x: f64) -> (f64); => erf);
131 (fn erfc(x: f64) -> (f64); => erfc);
132 (fn exp(x: f64) -> (f64); => exp);
133 (fn exp10(x: f64) -> (f64); => exp10);
134 (fn exp2(x: f64) -> (f64); => exp2);
135 (fn expm1(x: f64) -> (f64); => expm1);
136 (fn fabs(x: f64) -> (f64); => fabs);
137 (fn fdim(x: f64, y: f64) -> (f64); => fdim);
138 (fn floor(x: f64) -> (f64); => floor);
139 (fn fma(x: f64, y: f64, z: f64) -> (f64); => fma);
140 (fn fmax(x: f64, y: f64) -> (f64); => fmax);
141 (fn fmaximum(x: f64, y: f64) -> (f64); => fmaximum);
142 (fn fmaximum_num(x: f64, y: f64) -> (f64); => fmaximum_num);
143 (fn fmaximum_numf(x: f32, y: f32) -> (f32); => fmaximum_numf);
144 (fn fmaximumf(x: f32, y: f32) -> (f32); => fmaximumf);
145 (fn fmin(x: f64, y: f64) -> (f64); => fmin);
146 (fn fminimum(x: f64, y: f64) -> (f64); => fminimum);
147 (fn fminimum_num(x: f64, y: f64) -> (f64); => fminimum_num);
148 (fn fminimum_numf(x: f32, y: f32) -> (f32); => fminimum_numf);
149 (fn fminimumf(x: f32, y: f32) -> (f32); => fminimumf);
150 (fn fmod(x: f64, y: f64) -> (f64); => fmod);
151 (fn frexp(x: f64) -> (f64, i32); => frexp);
152 (fn hypot(x: f64, y: f64) -> (f64); => hypot);
153 (fn ilogb(x: f64) -> (i32); => ilogb);
154 (fn j0(x: f64) -> (f64); => j0);
155 (fn j1(x: f64) -> (f64); => j1);
156 (fn jn(n: i32, x: f64) -> (f64); => jn);
157 (fn ldexp(x: f64, n: i32) -> (f64); => ldexp);
158 (fn lgamma(x: f64) -> (f64); => lgamma);
159 (fn lgamma_r(x: f64) -> (f64, i32); => lgamma_r);
160 (fn log(x: f64) -> (f64); => log);
161 (fn log10(x: f64) -> (f64); => log10);
162 (fn log1p(x: f64) -> (f64); => log1p);
163 (fn log2(x: f64) -> (f64); => log2);
164 (fn modf(x: f64) -> (f64, f64); => modf);
165 (fn nextafter(x: f64, y: f64) -> (f64); => nextafter);
166 (fn pow(x: f64, y: f64) -> (f64); => pow);
167 (fn remainder(x: f64, y: f64) -> (f64); => remainder);
168 (fn remquo(x: f64, y: f64) -> (f64, i32); => remquo);
169 (fn rint(x: f64) -> (f64); => rint);
170 (fn round(x: f64) -> (f64); => round);
171 (fn roundevem(x: f64) -> (f64); => roundeven);
172 (fn scalbn(x: f64, n: i32) -> (f64); => scalbn);
173 (fn sin(x: f64) -> (f64); => sin);
174 (fn sincos(x: f64) -> (f64, f64); => sincos);
175 (fn sinh(x: f64) -> (f64); => sinh);
176 (fn sqrt(x: f64) -> (f64); => sqrt);
177 (fn tan(x: f64) -> (f64); => tan);
178 (fn tanh(x: f64) -> (f64); => tanh);
179 (fn tgamma(x: f64) -> (f64); => tgamma);
180 (fn trunc(x: f64) -> (f64); => trunc);
181 (fn y0(x: f64) -> (f64); => y0);
182 (fn y1(x: f64) -> (f64); => y1);
183 (fn yn(n: i32, x: f64) -> (f64); => yn);
184 }
186}
187
188#[cfg(f16_enabled)]
189libm_helper! {
190 f16,
191 funcs: {
192 (fn ceil(x: f16) -> (f16); => ceilf16);
194 (fn copysign(x: f16, y: f16) -> (f16); => copysignf16);
195 (fn fabs(x: f16) -> (f16); => fabsf16);
196 (fn fdim(x: f16, y: f16) -> (f16); => fdimf16);
197 (fn floor(x: f16) -> (f16); => floorf16);
198 (fn fmax(x: f16, y: f16) -> (f16); => fmaxf16);
199 (fn fmaximum_num(x: f16, y: f16) -> (f16); => fmaximum_numf16);
200 (fn fmaximumf16(x: f16, y: f16) -> (f16); => fmaximumf16);
201 (fn fmin(x: f16, y: f16) -> (f16); => fminf16);
202 (fn fminimum(x: f16, y: f16) -> (f16); => fminimumf16);
203 (fn fminimum_num(x: f16, y: f16) -> (f16); => fminimum_numf16);
204 (fn fmod(x: f16, y: f16) -> (f16); => fmodf16);
205 (fn ldexp(x: f16, n: i32) -> (f16); => ldexpf16);
206 (fn rint(x: f16) -> (f16); => rintf16);
207 (fn round(x: f16) -> (f16); => roundf16);
208 (fn roundeven(x: f16) -> (f16); => roundevenf16);
209 (fn scalbn(x: f16, n: i32) -> (f16); => scalbnf16);
210 (fn sqrtf(x: f16) -> (f16); => sqrtf16);
211 (fn truncf(x: f16) -> (f16); => truncf16);
212 }
214}
215
216#[cfg(f128_enabled)]
217libm_helper! {
218 f128,
219 funcs: {
220 (fn ceil(x: f128) -> (f128); => ceilf128);
222 (fn copysign(x: f128, y: f128) -> (f128); => copysignf128);
223 (fn fabs(x: f128) -> (f128); => fabsf128);
224 (fn fdim(x: f128, y: f128) -> (f128); => fdimf128);
225 (fn floor(x: f128) -> (f128); => floorf128);
226 (fn fma(x: f128, y: f128, z: f128) -> (f128); => fmaf128);
227 (fn fmax(x: f128, y: f128) -> (f128); => fmaxf128);
228 (fn fmaximum(x: f128, y: f128) -> (f128); => fmaximumf128);
229 (fn fmaximum_num(x: f128, y: f128) -> (f128); => fmaximum_numf128);
230 (fn fmin(x: f128, y: f128) -> (f128); => fminf128);
231 (fn fminimum(x: f128, y: f128) -> (f128); => fminimumf128);
232 (fn fminimum_num(x: f128, y: f128) -> (f128); => fminimum_numf128);
233 (fn fmod(x: f128, y: f128) -> (f128); => fmodf128);
234 (fn ldexp(x: f128, n: i32) -> (f128); => ldexpf128);
235 (fn rint(x: f128) -> (f128); => rintf128);
236 (fn round(x: f128) -> (f128); => roundf128);
237 (fn roundeven(x: f128) -> (f128); => roundevenf128);
238 (fn scalbn(x: f128, n: i32) -> (f128); => scalbnf128);
239 (fn sqrt(x: f128) -> (f128); => sqrtf128);
240 (fn trunc(x: f128) -> (f128); => truncf128);
241 }
243}
244