\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 r804535 = x;
double r804536 = y;
double r804537 = 2.0;
double r804538 = r804536 * r804537;
double r804539 = 1.0;
double r804540 = r804538 + r804539;
double r804541 = z;
double r804542 = r804540 * r804541;
double r804543 = t;
double r804544 = r804542 * r804543;
double r804545 = 16.0;
double r804546 = r804544 / r804545;
double r804547 = cos(r804546);
double r804548 = r804535 * r804547;
double r804549 = a;
double r804550 = r804549 * r804537;
double r804551 = r804550 + r804539;
double r804552 = b;
double r804553 = r804551 * r804552;
double r804554 = r804553 * r804543;
double r804555 = r804554 / r804545;
double r804556 = cos(r804555);
double r804557 = r804548 * r804556;
return r804557;
}
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 r804558 = 0.0;
double r804559 = 16.0;
double r804560 = r804558 / r804559;
double r804561 = cos(r804560);
double r804562 = x;
double r804563 = r804561 * r804562;
return r804563;
}




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 | 45.9 |
|---|---|
| Target | 44.2 |
| Herbie | 44.0 |
Initial program 45.9
Taylor expanded around 0 45.3
Taylor expanded around 0 44.0
Final simplification44.0
herbie shell --seed 2020024
(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))))