\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)x \cdot \cos \left(\left(\sqrt[3]{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \sqrt[3]{t}\right) \cdot \frac{\sqrt[3]{t}}{\frac{\frac{\frac{16}{z}}{\mathsf{fma}\left(2, y, 1\right)}}{\sqrt[3]{\sqrt[3]{t}}}}\right)double f(double x, double y, double z, double t, double a, double b) {
double r35157996 = x;
double r35157997 = y;
double r35157998 = 2.0;
double r35157999 = r35157997 * r35157998;
double r35158000 = 1.0;
double r35158001 = r35157999 + r35158000;
double r35158002 = z;
double r35158003 = r35158001 * r35158002;
double r35158004 = t;
double r35158005 = r35158003 * r35158004;
double r35158006 = 16.0;
double r35158007 = r35158005 / r35158006;
double r35158008 = cos(r35158007);
double r35158009 = r35157996 * r35158008;
double r35158010 = a;
double r35158011 = r35158010 * r35157998;
double r35158012 = r35158011 + r35158000;
double r35158013 = b;
double r35158014 = r35158012 * r35158013;
double r35158015 = r35158014 * r35158004;
double r35158016 = r35158015 / r35158006;
double r35158017 = cos(r35158016);
double r35158018 = r35158009 * r35158017;
return r35158018;
}
double f(double x, double y, double z, double t, double __attribute__((unused)) a, double __attribute__((unused)) b) {
double r35158019 = x;
double r35158020 = t;
double r35158021 = cbrt(r35158020);
double r35158022 = r35158021 * r35158021;
double r35158023 = cbrt(r35158022);
double r35158024 = r35158023 * r35158021;
double r35158025 = 16.0;
double r35158026 = z;
double r35158027 = r35158025 / r35158026;
double r35158028 = 2.0;
double r35158029 = y;
double r35158030 = 1.0;
double r35158031 = fma(r35158028, r35158029, r35158030);
double r35158032 = r35158027 / r35158031;
double r35158033 = cbrt(r35158021);
double r35158034 = r35158032 / r35158033;
double r35158035 = r35158021 / r35158034;
double r35158036 = r35158024 * r35158035;
double r35158037 = cos(r35158036);
double r35158038 = r35158019 * r35158037;
return r35158038;
}




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.2 |
|---|---|
| Target | 44.3 |
| Herbie | 45.3 |
Initial program 46.2
Simplified46.0
Taylor expanded around 0 45.6
rmApplied add-cube-cbrt45.6
Applied associate-/l*45.6
Taylor expanded around 0 45.3
rmApplied add-cube-cbrt45.3
Applied cbrt-prod45.3
Applied *-un-lft-identity45.3
Applied *-un-lft-identity45.3
Applied *-un-lft-identity45.3
Applied times-frac45.3
Applied times-frac45.3
Applied times-frac45.3
Applied times-frac45.3
Simplified45.3
Final simplification45.3
herbie shell --seed 2019172 +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))))