\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 r1500078 = x;
double r1500079 = y;
double r1500080 = 2.0;
double r1500081 = r1500079 * r1500080;
double r1500082 = 1.0;
double r1500083 = r1500081 + r1500082;
double r1500084 = z;
double r1500085 = r1500083 * r1500084;
double r1500086 = t;
double r1500087 = r1500085 * r1500086;
double r1500088 = 16.0;
double r1500089 = r1500087 / r1500088;
double r1500090 = cos(r1500089);
double r1500091 = r1500078 * r1500090;
double r1500092 = a;
double r1500093 = r1500092 * r1500080;
double r1500094 = r1500093 + r1500082;
double r1500095 = b;
double r1500096 = r1500094 * r1500095;
double r1500097 = r1500096 * r1500086;
double r1500098 = r1500097 / r1500088;
double r1500099 = cos(r1500098);
double r1500100 = r1500091 * r1500099;
return r1500100;
}
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 r1500101 = x;
return r1500101;
}




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.4 |
|---|---|
| Target | 44.7 |
| Herbie | 44.4 |
Initial program 46.4
Taylor expanded around 0 45.7
Taylor expanded around 0 44.4
Final simplification44.4
herbie shell --seed 2020025 +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))))