\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 r908422 = x;
double r908423 = y;
double r908424 = 2.0;
double r908425 = r908423 * r908424;
double r908426 = 1.0;
double r908427 = r908425 + r908426;
double r908428 = z;
double r908429 = r908427 * r908428;
double r908430 = t;
double r908431 = r908429 * r908430;
double r908432 = 16.0;
double r908433 = r908431 / r908432;
double r908434 = cos(r908433);
double r908435 = r908422 * r908434;
double r908436 = a;
double r908437 = r908436 * r908424;
double r908438 = r908437 + r908426;
double r908439 = b;
double r908440 = r908438 * r908439;
double r908441 = r908440 * r908430;
double r908442 = r908441 / r908432;
double r908443 = cos(r908442);
double r908444 = r908435 * r908443;
return r908444;
}
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 r908445 = x;
return r908445;
}




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.1 |
|---|---|
| Target | 44.3 |
| Herbie | 44.1 |
Initial program 46.1
Taylor expanded around 0 45.4
Taylor expanded around 0 44.1
Final simplification44.1
herbie shell --seed 2020062 +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))))