\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)x
double f(double x, double y, double z, double t, double a, double b) {
double r1042090 = x;
double r1042091 = y;
double r1042092 = 2.0;
double r1042093 = r1042091 * r1042092;
double r1042094 = 1.0;
double r1042095 = r1042093 + r1042094;
double r1042096 = z;
double r1042097 = r1042095 * r1042096;
double r1042098 = t;
double r1042099 = r1042097 * r1042098;
double r1042100 = 16.0;
double r1042101 = r1042099 / r1042100;
double r1042102 = cos(r1042101);
double r1042103 = r1042090 * r1042102;
double r1042104 = a;
double r1042105 = r1042104 * r1042092;
double r1042106 = r1042105 + r1042094;
double r1042107 = b;
double r1042108 = r1042106 * r1042107;
double r1042109 = r1042108 * r1042098;
double r1042110 = r1042109 / r1042100;
double r1042111 = cos(r1042110);
double r1042112 = r1042103 * r1042111;
return r1042112;
}
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 r1042113 = x;
return r1042113;
}




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.5 |
|---|---|
| Target | 44.6 |
| Herbie | 44.3 |
Initial program 46.5
Taylor expanded around 0 45.7
Taylor expanded around 0 44.3
Final simplification44.3
herbie shell --seed 2019305 +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))))