\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 -2.880621304139379492340982563553857775143 \cdot 10^{-30}:\\
\;\;\;\;x\\
\mathbf{elif}\;t \le 1.667516752212910857549534497395294505447 \cdot 10^{-147}:\\
\;\;\;\;\left(x \cdot \cos \left(\sqrt[3]{\mathsf{fma}\left(2, y, 1\right)} \cdot \left(\left(t \cdot \frac{z}{16}\right) \cdot \left(\sqrt[3]{\mathsf{fma}\left(2, y, 1\right)} \cdot \sqrt[3]{\mathsf{fma}\left(2, y, 1\right)}\right)\right)\right)\right) \cdot \cos \left(\mathsf{fma}\left(a, 2, 1\right) \cdot \left(\frac{b}{16} \cdot t\right)\right)\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r36739111 = x;
double r36739112 = y;
double r36739113 = 2.0;
double r36739114 = r36739112 * r36739113;
double r36739115 = 1.0;
double r36739116 = r36739114 + r36739115;
double r36739117 = z;
double r36739118 = r36739116 * r36739117;
double r36739119 = t;
double r36739120 = r36739118 * r36739119;
double r36739121 = 16.0;
double r36739122 = r36739120 / r36739121;
double r36739123 = cos(r36739122);
double r36739124 = r36739111 * r36739123;
double r36739125 = a;
double r36739126 = r36739125 * r36739113;
double r36739127 = r36739126 + r36739115;
double r36739128 = b;
double r36739129 = r36739127 * r36739128;
double r36739130 = r36739129 * r36739119;
double r36739131 = r36739130 / r36739121;
double r36739132 = cos(r36739131);
double r36739133 = r36739124 * r36739132;
return r36739133;
}
double f(double x, double y, double z, double t, double a, double b) {
double r36739134 = t;
double r36739135 = -2.8806213041393795e-30;
bool r36739136 = r36739134 <= r36739135;
double r36739137 = x;
double r36739138 = 1.6675167522129109e-147;
bool r36739139 = r36739134 <= r36739138;
double r36739140 = 2.0;
double r36739141 = y;
double r36739142 = 1.0;
double r36739143 = fma(r36739140, r36739141, r36739142);
double r36739144 = cbrt(r36739143);
double r36739145 = z;
double r36739146 = 16.0;
double r36739147 = r36739145 / r36739146;
double r36739148 = r36739134 * r36739147;
double r36739149 = r36739144 * r36739144;
double r36739150 = r36739148 * r36739149;
double r36739151 = r36739144 * r36739150;
double r36739152 = cos(r36739151);
double r36739153 = r36739137 * r36739152;
double r36739154 = a;
double r36739155 = fma(r36739154, r36739140, r36739142);
double r36739156 = b;
double r36739157 = r36739156 / r36739146;
double r36739158 = r36739157 * r36739134;
double r36739159 = r36739155 * r36739158;
double r36739160 = cos(r36739159);
double r36739161 = r36739153 * r36739160;
double r36739162 = r36739139 ? r36739161 : r36739137;
double r36739163 = r36739136 ? r36739137 : r36739162;
return r36739163;
}




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 | 47.2 |
|---|---|
| Target | 45.2 |
| Herbie | 44.6 |
if t < -2.8806213041393795e-30 or 1.6675167522129109e-147 < t Initial program 56.2
Simplified56.0
Taylor expanded around 0 54.9
Taylor expanded around 0 52.9
if -2.8806213041393795e-30 < t < 1.6675167522129109e-147Initial program 30.7
Simplified29.3
rmApplied add-cube-cbrt29.3
Applied associate-*r*29.4
Final simplification44.6
herbie shell --seed 2019174 +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))))