\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 \cdot \cos \left(\left(\sqrt[3]{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \sqrt[3]{t}\right) \cdot \frac{\sqrt[3]{t}}{\frac{\frac{\frac{16}{z}}{\mathsf{fma}\left(2, y, 1\right)}}{\sqrt[3]{\sqrt[3]{t}}}}\right)double f(double x, double y, double z, double t, double a, double b) {
double r32619394 = x;
double r32619395 = y;
double r32619396 = 2.0;
double r32619397 = r32619395 * r32619396;
double r32619398 = 1.0;
double r32619399 = r32619397 + r32619398;
double r32619400 = z;
double r32619401 = r32619399 * r32619400;
double r32619402 = t;
double r32619403 = r32619401 * r32619402;
double r32619404 = 16.0;
double r32619405 = r32619403 / r32619404;
double r32619406 = cos(r32619405);
double r32619407 = r32619394 * r32619406;
double r32619408 = a;
double r32619409 = r32619408 * r32619396;
double r32619410 = r32619409 + r32619398;
double r32619411 = b;
double r32619412 = r32619410 * r32619411;
double r32619413 = r32619412 * r32619402;
double r32619414 = r32619413 / r32619404;
double r32619415 = cos(r32619414);
double r32619416 = r32619407 * r32619415;
return r32619416;
}
double f(double x, double y, double z, double t, double __attribute__((unused)) a, double __attribute__((unused)) b) {
double r32619417 = x;
double r32619418 = t;
double r32619419 = cbrt(r32619418);
double r32619420 = r32619419 * r32619419;
double r32619421 = cbrt(r32619420);
double r32619422 = r32619421 * r32619419;
double r32619423 = 16.0;
double r32619424 = z;
double r32619425 = r32619423 / r32619424;
double r32619426 = 2.0;
double r32619427 = y;
double r32619428 = 1.0;
double r32619429 = fma(r32619426, r32619427, r32619428);
double r32619430 = r32619425 / r32619429;
double r32619431 = cbrt(r32619419);
double r32619432 = r32619430 / r32619431;
double r32619433 = r32619419 / r32619432;
double r32619434 = r32619422 * r32619433;
double r32619435 = cos(r32619434);
double r32619436 = r32619417 * r32619435;
return r32619436;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 46.2 |
|---|---|
| Target | 44.3 |
| Herbie | 45.3 |
Initial program 46.2
Simplified46.0
Taylor expanded around 0 45.6
rmApplied add-cube-cbrt45.6
Applied associate-/l*45.6
Taylor expanded around 0 45.3
rmApplied add-cube-cbrt45.3
Applied cbrt-prod45.3
Applied *-un-lft-identity45.3
Applied *-un-lft-identity45.3
Applied *-un-lft-identity45.3
Applied times-frac45.3
Applied times-frac45.3
Applied times-frac45.3
Applied times-frac45.3
Simplified45.3
Final simplification45.3
herbie shell --seed 2019172 +o rules:numerics
(FPCore (x y z t a b)
:name "Codec.Picture.Jpg.FastDct:referenceDct from JuicyPixels-3.2.6.1"
:herbie-target
(* x (cos (* (/ b 16.0) (/ t (+ (- 1.0 (* a 2.0)) (pow (* a 2.0) 2.0))))))
(* (* x (cos (/ (* (* (+ (* y 2.0) 1.0) z) t) 16.0))) (cos (/ (* (* (+ (* a 2.0) 1.0) b) t) 16.0))))