R = [0;1/4];
T = floating;
-E = relative;
B = [|SG...|];
// write fp values such that they always have a decimal point
print("sin(pi x) in binary32");
I = [|1,3,5,7|];
F = sin(pi*x);
-P = fpminimax(F,I,B,R,T,E);
+P = fpminimax(F,I,B,R,T,relative);
f32_data_write("F32_SIN_PI_7", P,F,R);
f32_write_list("F32_SIN_PI_7", list_of_odd_coeff(P));
print("\n");
print("cos(pi x) in binary32");
I = [|0,2,4,6,8|];
F = cos(pi*x);
-P = fpminimax(F,I,B,R,T,E);
+P = fpminimax(F,I,B,R,T,absolute);
f32_data_write("F32_COS_PI_8", P,F,R);
f32_write_list("F32_COS_PI_8", list_of_even_coeff(P));
print("\n");
I = [|1,3,5,7,9,11,13,15|];
F = tan(pi*x);
-P = fpminimax(F,I,B,R,T,E);
+P = fpminimax(F,I,B,R,T,relative);
f32_data_write("F32_TAN_PI", P,F,R);
f32_write_list("F32_TAN_PI", list_of_odd_coeff(P));
const F32_COS_PI_8_K: [f32; 4] = unsafe {
std::mem::transmute::<[u32; 4], _>([
0xc09de9e6, // -0x1.3bd3ccp2
- 0x4081e0dc, // 0x1.03c1b8p2
- 0xbfaadbe7, // -0x1.55b7cep0
- 0x3e6b4255, // 0x1.d684aap-3
+ 0x4081e0db, // 0x1.03c1b6p2
+ 0xbfaadb42, // -0x1.55b684p0
+ 0x3e6b0f14, // 0x1.d61e28p-3
])
};
pub fn exhaustive_cos_pi() {
let errors = check_exhaustive_f32(ref_cos_pi_f32, |a| sin_cos_pi_f32(a).1, false);
println!("COS: {errors:?}");
- assert_eq!(errors.num_errors, 45_896_848);
+ assert_eq!(errors.num_errors, 45_882_714);
assert_eq!(errors.max_error_ulp, 1);
}