diff --git a/src/v1.rs b/src/v1.rs index 2aea4f6..a15d53c 100644 --- a/src/v1.rs +++ b/src/v1.rs @@ -1,53 +1,19 @@ use binrw::{binrw,BinReaderExt,io::TakeSeekExt}; -// whatever this is +// the bit chunks are deposited in reverse fn trey_float(f:f32)->f32{ let bits=f.to_bits(); - let s=bits&1!=0; - let e=((bits>>1)&((1<<8)-1)) as i32; + let s=bits&1; + let e=(bits>>1)&((1<<8)-1); let m=(bits>>(1+8))&((1<<23)-1); - if e==255{ - if m==0{ - if s{ - f32::NEG_INFINITY - }else{ - f32::INFINITY - } - }else if m==1{ - f32::NAN - }else{ - // this is supposed to be QNAN but idk how to say it in rust - f32::NAN - } - }else if e==0{ - if s{-(m as f32)*2.0f32.powi(-149)}else{(m as f32)*2.0f32.powi(-149)} - }else{ - if s{-(m as f32/2.0f32.powi(23)+1.0)*2.0f32.powi(e-127)}else{(m as f32/2.0f32.powi(23)+1.0)*2.0f32.powi(e-127)} - } + f32::from_bits(m|(e<<23)|(s<<31)) } fn trey_double(f:f64)->f64{ let bits=f.to_bits(); - let s=bits&1!=0; - let e=((bits>>1)&((1<<11)-1)) as i32; + let s=bits&1; + let e=(bits>>1)&((1<<11)-1); let m=(bits>>(1+11))&((1<<52)-1); - if e==2047{ - if m==0{ - if s{ - f64::NEG_INFINITY - }else{ - f64::INFINITY - } - }else if m==1{ - f64::NAN - }else{ - // this is supposed to be QNAN but idk how to say it in rust - f64::NAN - } - }else if e==0{ - if s{-(m as f64)*2.0f64.powi(-1074)}else{(m as f64)*2.0f64.powi(-1074)} - }else{ - if s{-(m as f64/2.0f64.powi(52)+1.0)*2.0f64.powi(e-1023)}else{(m as f64/2.0f64.powi(52)+1.0)*2.0f64.powi(e-1023)} - } + f64::from_bits(m|(e<<52)|(s<<63)) } #[binrw]