const_soft_float/soft_f64/
trunc.rs1use super::SoftF64;
2
3pub(crate) const fn trunc(x: SoftF64) -> SoftF64 {
4 let mut i: u64 = x.to_bits();
5 let mut e: i64 = (i >> 52 & 0x7ff) as i64 - 0x3ff + 12;
6
7 if e >= 52 + 12 {
8 return x;
9 }
10 if e < 12 {
11 e = 1;
12 }
13 let m = -1i64 as u64 >> e;
14 if (i & m) == 0 {
15 return x;
16 }
17 i &= !m;
18 SoftF64::from_bits(i)
19}
20
21#[cfg(test)]
22mod tests {
23 use crate::soft_f64::SoftF64;
24
25 #[test]
26 fn sanity_check() {
27 assert_eq!(super::trunc(SoftF64(1.1)).0, 1.0);
28 }
29}