\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.060669677199602035061477865845248702011 \cdot 10^{-68} \lor \neg \left(t \le 2.298617900197692054257084183444212053386 \cdot 10^{-208}\right):\\
\;\;\;\;\left(x \cdot 1\right) \cdot \sqrt[3]{1}\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \cos \left(\frac{\left(t \cdot z\right) \cdot \mathsf{fma}\left(2, y, 1\right)}{16}\right)\right) \cdot \cos \left(\frac{\left(\left(a \cdot 2 + 1\right) \cdot b\right) \cdot t}{16}\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r1055260 = x;
double r1055261 = y;
double r1055262 = 2.0;
double r1055263 = r1055261 * r1055262;
double r1055264 = 1.0;
double r1055265 = r1055263 + r1055264;
double r1055266 = z;
double r1055267 = r1055265 * r1055266;
double r1055268 = t;
double r1055269 = r1055267 * r1055268;
double r1055270 = 16.0;
double r1055271 = r1055269 / r1055270;
double r1055272 = cos(r1055271);
double r1055273 = r1055260 * r1055272;
double r1055274 = a;
double r1055275 = r1055274 * r1055262;
double r1055276 = r1055275 + r1055264;
double r1055277 = b;
double r1055278 = r1055276 * r1055277;
double r1055279 = r1055278 * r1055268;
double r1055280 = r1055279 / r1055270;
double r1055281 = cos(r1055280);
double r1055282 = r1055273 * r1055281;
return r1055282;
}
double f(double x, double y, double z, double t, double a, double b) {
double r1055283 = t;
double r1055284 = -2.060669677199602e-68;
bool r1055285 = r1055283 <= r1055284;
double r1055286 = 2.298617900197692e-208;
bool r1055287 = r1055283 <= r1055286;
double r1055288 = !r1055287;
bool r1055289 = r1055285 || r1055288;
double r1055290 = x;
double r1055291 = 1.0;
double r1055292 = r1055290 * r1055291;
double r1055293 = cbrt(r1055291);
double r1055294 = r1055292 * r1055293;
double r1055295 = z;
double r1055296 = r1055283 * r1055295;
double r1055297 = 2.0;
double r1055298 = y;
double r1055299 = 1.0;
double r1055300 = fma(r1055297, r1055298, r1055299);
double r1055301 = r1055296 * r1055300;
double r1055302 = 16.0;
double r1055303 = r1055301 / r1055302;
double r1055304 = cos(r1055303);
double r1055305 = r1055290 * r1055304;
double r1055306 = a;
double r1055307 = r1055306 * r1055297;
double r1055308 = r1055307 + r1055299;
double r1055309 = b;
double r1055310 = r1055308 * r1055309;
double r1055311 = r1055310 * r1055283;
double r1055312 = r1055311 / r1055302;
double r1055313 = cos(r1055312);
double r1055314 = r1055305 * r1055313;
double r1055315 = r1055289 ? r1055294 : r1055314;
return r1055315;
}




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.5 |
|---|---|
| Target | 44.8 |
| Herbie | 44.3 |
if t < -2.060669677199602e-68 or 2.298617900197692e-208 < t Initial program 53.5
Taylor expanded around 0 52.5
rmApplied associate-*l*52.4
rmApplied add-cbrt-cube52.4
Simplified52.4
Taylor expanded around 0 50.7
if -2.060669677199602e-68 < t < 2.298617900197692e-208Initial program 28.0
Taylor expanded around inf 28.0
Simplified27.3
Final simplification44.3
herbie shell --seed 2019354 +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))))