| 183 | } |
| 184 | |
| 185 | bool is_integer(double x) { |
| 186 | using FPBits = fputil::FPBits<double>; |
| 187 | FPBits xbits(x); |
| 188 | uint64_t x_u = xbits.uintval(); |
| 189 | unsigned x_e = static_cast<unsigned>(xbits.get_biased_exponent()); |
| 190 | unsigned lsb = |
| 191 | static_cast<unsigned>(cpp::countr_zero(x_u | FPBits::EXP_MASK)); |
| 192 | constexpr unsigned UNIT_EXPONENT = |
| 193 | static_cast<unsigned>(FPBits::EXP_BIAS + FPBits::FRACTION_LEN); |
| 194 | return (x_e + lsb >= UNIT_EXPONENT); |
| 195 | } |
| 196 | |
| 197 | } // namespace |
| 198 |
no test coverage detected