#[cfg_attr(assert_no_panic, no_panic::no_panic)]
pub fn remquo(mut x: f64, mut y: f64) -> (f64, i32) {
    let ux: u64 = x.to_bits();
    let mut uy: u64 = y.to_bits();
    let mut ex = ((ux >> 52) & 0x7ff) as i32;
    let mut ey = ((uy >> 52) & 0x7ff) as i32;
    let sx = (ux >> 63) != 0;
    let sy = (uy >> 63) != 0;
    let mut q: u32;
    let mut i: u64;
    let mut uxi: u64 = ux;

    if (uy << 1) == 0 || y.is_nan() || ex == 0x7ff {
        return ((x * y) / (x * y), 0);
    }
    if (ux << 1) == 0 {
        return (x, 0);
    }

    /* normalize x and y */
    if ex == 0 {
        i = uxi << 12;
        while (i >> 63) == 0 {
            ex -= 1;
            i <<= 1;
        }
        uxi <<= -ex + 1;
    } else {
        uxi &= (!0) >> 12;
        uxi |= 1 << 52;
    }
    if ey == 0 {
        i = uy << 12;
        while (i >> 63) == 0 {
            ey -= 1;
            i <<= 1;
        }
        uy <<= -ey + 1;
    } else {
        uy &= (!0) >> 12;
        uy |= 1 << 52;
    }

    q = 0;

    if ex + 1 != ey {
        if ex < ey {
            return (x, 0);
        }
        /* x mod y */
        while ex > ey {
            i = uxi.wrapping_sub(uy);
            if (i >> 63) == 0 {
                uxi = i;
                q += 1;
            }
            uxi <<= 1;
            q <<= 1;
            ex -= 1;
        }
        i = uxi.wrapping_sub(uy);
        if (i >> 63) == 0 {
            uxi = i;
            q += 1;
        }
        if uxi == 0 {
            ex = -60;
        } else {
            while (uxi >> 52) == 0 {
                uxi <<= 1;
                ex -= 1;
            }
        }
    }

    /* scale result and decide between |x| and |x|-|y| */
    if ex > 0 {
        uxi -= 1 << 52;
        uxi |= (ex as u64) << 52;
    } else {
        uxi >>= -ex + 1;
    }
    x = f64::from_bits(uxi);
    if sy {
        y = -y;
    }
    if ex == ey || (ex + 1 == ey && (2.0 * x > y || (2.0 * x == y && (q % 2) != 0))) {
        x -= y;
        // TODO: this matches musl behavior, but it is incorrect
        q = q.wrapping_add(1);
    }
    q &= 0x7fffffff;
    let quo = if sx ^ sy { -(q as i32) } else { q as i32 };
    if sx { (-x, quo) } else { (x, quo) }
}

#[cfg(test)]
mod tests {
    use super::remquo;

    #[test]
    fn test_q_overflow() {
        // 0xc000000000000001, 0x04c0000000000004
        let _ = remquo(-2.0000000000000004, 8.406091369059082e-286);
    }
}
