]>
git.proxmox.com Git - rustc.git/blob - vendor/compiler_builtins/libm/src/math/fmod.rs
3 #[cfg_attr(all(test, assert_no_panic), no_panic::no_panic)]
4 pub fn fmod(x
: f64, y
: f64) -> f64 {
5 let mut uxi
= x
.to_bits();
6 let mut uyi
= y
.to_bits();
7 let mut ex
= (uxi
>> 52 & 0x7ff) as i64;
8 let mut ey
= (uyi
>> 52 & 0x7ff) as i64;
12 if uyi
<< 1 == 0 || y
.is_nan() || ex
== 0x7ff {
13 return (x
* y
) / (x
* y
);
15 if uxi
<< 1 <= uyi
<< 1 {
16 if uxi
<< 1 == uyi
<< 1 {
22 /* normalize x and y */
31 uxi
&= u64::MAX
>> 12;
42 uyi
&= u64::MAX
>> 12;
48 i
= uxi
.wrapping_sub(uyi
);
58 i
= uxi
.wrapping_sub(uyi
);
65 while uxi
>> 52 == 0 {
73 uxi
|= (ex
as u64) << 52;
77 uxi
|= (sx
as u64) << 63;