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))
|
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
|
/* Unit type unused for now, may revive it for map files
|
||||||
///[-1.0,1.0] = [-2^30,2^30]
|
///[-1.0,1.0] = [-2^30,2^30]
|
||||||
|
Loading…
Reference in New Issue
Block a user