\left(x \cdot \cos \left(\frac{\left(\left(y \cdot 2 + 1\right) \cdot z\right) \cdot t}{16}\right)\right) \cdot \cos \left(\frac{\left(\left(a \cdot 2 + 1\right) \cdot b\right) \cdot t}{16}\right)\cos \left(\frac{0}{16}\right) \cdot xdouble f(double x, double y, double z, double t, double a, double b) {
double r987700 = x;
double r987701 = y;
double r987702 = 2.0;
double r987703 = r987701 * r987702;
double r987704 = 1.0;
double r987705 = r987703 + r987704;
double r987706 = z;
double r987707 = r987705 * r987706;
double r987708 = t;
double r987709 = r987707 * r987708;
double r987710 = 16.0;
double r987711 = r987709 / r987710;
double r987712 = cos(r987711);
double r987713 = r987700 * r987712;
double r987714 = a;
double r987715 = r987714 * r987702;
double r987716 = r987715 + r987704;
double r987717 = b;
double r987718 = r987716 * r987717;
double r987719 = r987718 * r987708;
double r987720 = r987719 / r987710;
double r987721 = cos(r987720);
double r987722 = r987713 * r987721;
return r987722;
}
double f(double x, double __attribute__((unused)) y, double __attribute__((unused)) z, double __attribute__((unused)) t, double __attribute__((unused)) a, double __attribute__((unused)) b) {
double r987723 = 0.0;
double r987724 = 16.0;
double r987725 = r987723 / r987724;
double r987726 = cos(r987725);
double r987727 = x;
double r987728 = r987726 * r987727;
return r987728;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 46.7 |
|---|---|
| Target | 44.9 |
| Herbie | 44.6 |
Initial program 46.7
Simplified46.7
Taylor expanded around 0 45.9
Taylor expanded around 0 44.6
Final simplification44.6
herbie shell --seed 2020043 +o rules:numerics
(FPCore (x y z t a b)
:name "Codec.Picture.Jpg.FastDct:referenceDct from JuicyPixels-3.2.6.1"
:precision binary64
:herbie-target
(* x (cos (* (/ b 16) (/ t (+ (- 1 (* a 2)) (pow (* a 2) 2))))))
(* (* x (cos (/ (* (* (+ (* y 2) 1) z) t) 16))) (cos (/ (* (* (+ (* a 2) 1) b) t) 16))))