wacky angle sin cos test
This commit is contained in:
parent
f4903abd33
commit
759648ebfb
@ -480,6 +480,26 @@ impl std::ops::Mul<Angle32> for Angle32{
|
||||
Angle32(self.0.wrapping_mul(rhs.0))
|
||||
}
|
||||
}
|
||||
#[test]
|
||||
fn angle_sin_cos(){
|
||||
fn close_enough(lhs:Planar64,rhs:Planar64)->bool{
|
||||
(lhs-rhs).abs()<Planar64::EPSILON*4
|
||||
}
|
||||
fn test_angle(f:f64){
|
||||
let a=Angle32((f/Angle32::ANGLE32_TO_FLOAT64_RADIANS) as i32);
|
||||
println!("a={:#034b}",a.0);
|
||||
let (c,s)=a.cos_sin();
|
||||
let h=(s*s+c*c).sqrt();
|
||||
println!("cordic s={} c={}",(s/h).divide(),(c/h).divide());
|
||||
let (fs,fc)=f.sin_cos();
|
||||
println!("float s={} c={}",fs,fc);
|
||||
assert!(close_enough((c/h).divide().fix_1(),Planar64::raw((fc*((1u64<<32) as f64)) as i64)));
|
||||
assert!(close_enough((s/h).divide().fix_1(),Planar64::raw((fs*((1u64<<32) as f64)) as i64)));
|
||||
}
|
||||
test_angle(1.0);
|
||||
test_angle(std::f64::consts::PI/4.0);
|
||||
test_angle(std::f64::consts::PI/8.0);
|
||||
}
|
||||
|
||||
/* Unit type unused for now, may revive it for map files
|
||||
///[-1.0,1.0] = [-2^30,2^30]
|
||||
|
Loading…
Reference in New Issue
Block a user