\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)\begin{array}{l}
\mathbf{if}\;z \le -1.240748569708252395959560652470813898659 \cdot 10^{-65} \lor \neg \left(z \le 8591447155711080931012589264785569914814000\right):\\
\;\;\;\;x\\
\mathbf{else}:\\
\;\;\;\;x \cdot \cos \left(\frac{\left(\mathsf{fma}\left(2, y, 1\right) \cdot \left(z \cdot \left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right)\right)\right) \cdot \sqrt[3]{t}}{16}\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r594447 = x;
double r594448 = y;
double r594449 = 2.0;
double r594450 = r594448 * r594449;
double r594451 = 1.0;
double r594452 = r594450 + r594451;
double r594453 = z;
double r594454 = r594452 * r594453;
double r594455 = t;
double r594456 = r594454 * r594455;
double r594457 = 16.0;
double r594458 = r594456 / r594457;
double r594459 = cos(r594458);
double r594460 = r594447 * r594459;
double r594461 = a;
double r594462 = r594461 * r594449;
double r594463 = r594462 + r594451;
double r594464 = b;
double r594465 = r594463 * r594464;
double r594466 = r594465 * r594455;
double r594467 = r594466 / r594457;
double r594468 = cos(r594467);
double r594469 = r594460 * r594468;
return r594469;
}
double f(double x, double y, double z, double t, double __attribute__((unused)) a, double __attribute__((unused)) b) {
double r594470 = z;
double r594471 = -1.2407485697082524e-65;
bool r594472 = r594470 <= r594471;
double r594473 = 8.591447155711081e+42;
bool r594474 = r594470 <= r594473;
double r594475 = !r594474;
bool r594476 = r594472 || r594475;
double r594477 = x;
double r594478 = 2.0;
double r594479 = y;
double r594480 = 1.0;
double r594481 = fma(r594478, r594479, r594480);
double r594482 = t;
double r594483 = cbrt(r594482);
double r594484 = r594483 * r594483;
double r594485 = r594470 * r594484;
double r594486 = r594481 * r594485;
double r594487 = r594486 * r594483;
double r594488 = 16.0;
double r594489 = r594487 / r594488;
double r594490 = cos(r594489);
double r594491 = r594477 * r594490;
double r594492 = r594476 ? r594477 : r594491;
return r594492;
}




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 | 45.9 |
|---|---|
| Target | 44.3 |
| Herbie | 44.0 |
if z < -1.2407485697082524e-65 or 8.591447155711081e+42 < z Initial program 52.9
Taylor expanded around 0 52.5
Taylor expanded around 0 50.2
if -1.2407485697082524e-65 < z < 8.591447155711081e+42Initial program 38.5
Taylor expanded around 0 37.5
rmApplied add-cube-cbrt37.5
Applied associate-*r*37.5
Simplified37.4
Final simplification44.0
herbie shell --seed 2019325 +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))))