\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 -1.202788797825691552687024499585777929908 \cdot 10^{50}:\\
\;\;\;\;x\\
\mathbf{elif}\;t \le 2.560308249679174743120860805530103314552 \cdot 10^{-28}:\\
\;\;\;\;\left(x \cdot \cos \left(\left(\sqrt[3]{z} \cdot \frac{\sqrt[3]{t}}{\frac{\sqrt{16}}{1 + 2 \cdot y}}\right) \cdot \left(\left(\frac{\sqrt[3]{t} \cdot \sqrt[3]{t}}{\sqrt{16}} \cdot \sqrt[3]{z}\right) \cdot \sqrt[3]{z}\right)\right)\right) \cdot \cos \left(\left(1 + a \cdot 2\right) \cdot \left(\frac{t}{16} \cdot b\right)\right)\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r1001080 = x;
double r1001081 = y;
double r1001082 = 2.0;
double r1001083 = r1001081 * r1001082;
double r1001084 = 1.0;
double r1001085 = r1001083 + r1001084;
double r1001086 = z;
double r1001087 = r1001085 * r1001086;
double r1001088 = t;
double r1001089 = r1001087 * r1001088;
double r1001090 = 16.0;
double r1001091 = r1001089 / r1001090;
double r1001092 = cos(r1001091);
double r1001093 = r1001080 * r1001092;
double r1001094 = a;
double r1001095 = r1001094 * r1001082;
double r1001096 = r1001095 + r1001084;
double r1001097 = b;
double r1001098 = r1001096 * r1001097;
double r1001099 = r1001098 * r1001088;
double r1001100 = r1001099 / r1001090;
double r1001101 = cos(r1001100);
double r1001102 = r1001093 * r1001101;
return r1001102;
}
double f(double x, double y, double z, double t, double a, double b) {
double r1001103 = t;
double r1001104 = -1.2027887978256916e+50;
bool r1001105 = r1001103 <= r1001104;
double r1001106 = x;
double r1001107 = 2.5603082496791747e-28;
bool r1001108 = r1001103 <= r1001107;
double r1001109 = z;
double r1001110 = cbrt(r1001109);
double r1001111 = cbrt(r1001103);
double r1001112 = 16.0;
double r1001113 = sqrt(r1001112);
double r1001114 = 1.0;
double r1001115 = 2.0;
double r1001116 = y;
double r1001117 = r1001115 * r1001116;
double r1001118 = r1001114 + r1001117;
double r1001119 = r1001113 / r1001118;
double r1001120 = r1001111 / r1001119;
double r1001121 = r1001110 * r1001120;
double r1001122 = r1001111 * r1001111;
double r1001123 = r1001122 / r1001113;
double r1001124 = r1001123 * r1001110;
double r1001125 = r1001124 * r1001110;
double r1001126 = r1001121 * r1001125;
double r1001127 = cos(r1001126);
double r1001128 = r1001106 * r1001127;
double r1001129 = a;
double r1001130 = r1001129 * r1001115;
double r1001131 = r1001114 + r1001130;
double r1001132 = r1001103 / r1001112;
double r1001133 = b;
double r1001134 = r1001132 * r1001133;
double r1001135 = r1001131 * r1001134;
double r1001136 = cos(r1001135);
double r1001137 = r1001128 * r1001136;
double r1001138 = r1001108 ? r1001137 : r1001106;
double r1001139 = r1001105 ? r1001106 : r1001138;
return r1001139;
}




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 | 47.2 |
|---|---|
| Target | 45.2 |
| Herbie | 44.8 |
if t < -1.2027887978256916e+50 or 2.5603082496791747e-28 < t Initial program 59.2
Simplified59.2
Taylor expanded around 0 57.9
Taylor expanded around 0 55.3
if -1.2027887978256916e+50 < t < 2.5603082496791747e-28Initial program 35.8
Simplified35.2
rmApplied add-cube-cbrt35.3
Applied *-un-lft-identity35.3
Applied add-sqr-sqrt35.3
Applied times-frac35.3
Applied times-frac35.3
Applied add-cube-cbrt35.3
Applied times-frac34.8
Simplified34.8
Simplified34.8
Final simplification44.8
herbie shell --seed 2019174
(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))))