\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}\;t \le 8.227621728721539868314394994500716678162 \cdot 10^{-310}:\\
\;\;\;\;x\\
\mathbf{else}:\\
\;\;\;\;\cos \left(\left(b \cdot \frac{t}{16}\right) \cdot \left(2 \cdot a + 1\right)\right) \cdot \left(\cos \left(\left(\frac{\sqrt{t}}{\frac{\sqrt[3]{16}}{\sqrt[3]{1 + y \cdot 2}}} \cdot z\right) \cdot \frac{\sqrt{t}}{\frac{\sqrt[3]{16}}{\sqrt[3]{1 + y \cdot 2}} \cdot \frac{\sqrt[3]{16}}{\sqrt[3]{1 + y \cdot 2}}}\right) \cdot x\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r668278 = x;
double r668279 = y;
double r668280 = 2.0;
double r668281 = r668279 * r668280;
double r668282 = 1.0;
double r668283 = r668281 + r668282;
double r668284 = z;
double r668285 = r668283 * r668284;
double r668286 = t;
double r668287 = r668285 * r668286;
double r668288 = 16.0;
double r668289 = r668287 / r668288;
double r668290 = cos(r668289);
double r668291 = r668278 * r668290;
double r668292 = a;
double r668293 = r668292 * r668280;
double r668294 = r668293 + r668282;
double r668295 = b;
double r668296 = r668294 * r668295;
double r668297 = r668296 * r668286;
double r668298 = r668297 / r668288;
double r668299 = cos(r668298);
double r668300 = r668291 * r668299;
return r668300;
}
double f(double x, double y, double z, double t, double a, double b) {
double r668301 = t;
double r668302 = 8.22762172872154e-310;
bool r668303 = r668301 <= r668302;
double r668304 = x;
double r668305 = b;
double r668306 = 16.0;
double r668307 = r668301 / r668306;
double r668308 = r668305 * r668307;
double r668309 = 2.0;
double r668310 = a;
double r668311 = r668309 * r668310;
double r668312 = 1.0;
double r668313 = r668311 + r668312;
double r668314 = r668308 * r668313;
double r668315 = cos(r668314);
double r668316 = sqrt(r668301);
double r668317 = cbrt(r668306);
double r668318 = y;
double r668319 = r668318 * r668309;
double r668320 = r668312 + r668319;
double r668321 = cbrt(r668320);
double r668322 = r668317 / r668321;
double r668323 = r668316 / r668322;
double r668324 = z;
double r668325 = r668323 * r668324;
double r668326 = r668322 * r668322;
double r668327 = r668316 / r668326;
double r668328 = r668325 * r668327;
double r668329 = cos(r668328);
double r668330 = r668329 * r668304;
double r668331 = r668315 * r668330;
double r668332 = r668303 ? r668304 : r668331;
return r668332;
}




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.8 |
|---|---|
| Target | 44.1 |
| Herbie | 44.7 |
if t < 8.22762172872154e-310Initial program 45.7
Simplified45.4
Taylor expanded around 0 44.9
Taylor expanded around 0 44.0
if 8.22762172872154e-310 < t Initial program 45.9
Simplified45.6
rmApplied *-un-lft-identity45.6
Applied add-cube-cbrt45.6
Applied add-cube-cbrt45.6
Applied times-frac45.6
Applied times-frac45.6
Applied add-sqr-sqrt45.6
Applied times-frac45.4
Simplified45.5
Simplified45.4
Final simplification44.7
herbie shell --seed 2019194
(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))))