\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.042995466634546817409234316353768133463 \cdot 10^{-49}:\\
\;\;\;\;x\\
\mathbf{elif}\;t \le 2.675034367401779051171497280188193730335 \cdot 10^{129}:\\
\;\;\;\;\cos \left(\frac{1}{\frac{\frac{\frac{16}{\sqrt[3]{\mathsf{fma}\left(2, a, 1\right)}}}{b}}{\sqrt[3]{t}}} \cdot \left(\left(\sqrt[3]{\mathsf{fma}\left(2, a, 1\right)} \cdot \sqrt[3]{\mathsf{fma}\left(2, a, 1\right)}\right) \cdot \left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right)\right)\right) \cdot x\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r36825223 = x;
double r36825224 = y;
double r36825225 = 2.0;
double r36825226 = r36825224 * r36825225;
double r36825227 = 1.0;
double r36825228 = r36825226 + r36825227;
double r36825229 = z;
double r36825230 = r36825228 * r36825229;
double r36825231 = t;
double r36825232 = r36825230 * r36825231;
double r36825233 = 16.0;
double r36825234 = r36825232 / r36825233;
double r36825235 = cos(r36825234);
double r36825236 = r36825223 * r36825235;
double r36825237 = a;
double r36825238 = r36825237 * r36825225;
double r36825239 = r36825238 + r36825227;
double r36825240 = b;
double r36825241 = r36825239 * r36825240;
double r36825242 = r36825241 * r36825231;
double r36825243 = r36825242 / r36825233;
double r36825244 = cos(r36825243);
double r36825245 = r36825236 * r36825244;
return r36825245;
}
double f(double x, double __attribute__((unused)) y, double __attribute__((unused)) z, double t, double a, double b) {
double r36825246 = t;
double r36825247 = -1.0429954666345468e-49;
bool r36825248 = r36825246 <= r36825247;
double r36825249 = x;
double r36825250 = 2.675034367401779e+129;
bool r36825251 = r36825246 <= r36825250;
double r36825252 = 1.0;
double r36825253 = 16.0;
double r36825254 = 2.0;
double r36825255 = a;
double r36825256 = 1.0;
double r36825257 = fma(r36825254, r36825255, r36825256);
double r36825258 = cbrt(r36825257);
double r36825259 = r36825253 / r36825258;
double r36825260 = b;
double r36825261 = r36825259 / r36825260;
double r36825262 = cbrt(r36825246);
double r36825263 = r36825261 / r36825262;
double r36825264 = r36825252 / r36825263;
double r36825265 = r36825258 * r36825258;
double r36825266 = r36825262 * r36825262;
double r36825267 = r36825265 * r36825266;
double r36825268 = r36825264 * r36825267;
double r36825269 = cos(r36825268);
double r36825270 = r36825269 * r36825249;
double r36825271 = r36825251 ? r36825270 : r36825249;
double r36825272 = r36825248 ? r36825249 : r36825271;
return r36825272;
}




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.3 |
|---|---|
| Target | 44.5 |
| Herbie | 44.2 |
if t < -1.0429954666345468e-49 or 2.675034367401779e+129 < t Initial program 58.7
Taylor expanded around 0 57.5
Taylor expanded around 0 55.0
if -1.0429954666345468e-49 < t < 2.675034367401779e+129Initial program 36.4
Taylor expanded around 0 36.1
rmApplied clear-num36.1
Simplified36.0
rmApplied add-cube-cbrt36.2
Applied *-un-lft-identity36.2
Applied add-cube-cbrt36.1
Applied *-un-lft-identity36.1
Applied times-frac36.2
Applied times-frac36.1
Applied times-frac35.8
Applied *-un-lft-identity35.8
Applied times-frac35.7
Simplified35.7
Final simplification44.2
herbie shell --seed 2019169 +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))))