fn approx_sqrt(x: f32) -> f32 {
let mentisa = (x.to_bits() & 0x007f_ffff);
let ilog = (x.to_bits() >> 23) as i32 - 127;
let ilog_half = ilog / 2;
let bits = mentisa | (((ilog_half + 127) as u32) << 23);
f32::from_bits(bits)
}
fn main() {
for i in 0..=64 {
let x = i as f32 / 64.0;
let exact = x.sqrt();
let approx = approx_sqrt(x);
println!("{:.7} {:.7} {:.7} {:.7}",
x, exact, approx, (exact - approx).abs())
}
}