\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}\;b \le 6.9807938153255191 \cdot 10^{74}:\\
\;\;\;\;\left(x \cdot \cos \left(\frac{0}{16}\right)\right) \cdot \cos \left(\frac{\frac{\frac{\mathsf{fma}\left(a, 2, 1\right) \cdot \left(b \cdot t\right)}{\sqrt[3]{16}}}{\sqrt[3]{16}}}{{16}^{\frac{1}{3}}}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \cos \left(\frac{0}{16}\right)\right) \cdot 1\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r896001 = x;
double r896002 = y;
double r896003 = 2.0;
double r896004 = r896002 * r896003;
double r896005 = 1.0;
double r896006 = r896004 + r896005;
double r896007 = z;
double r896008 = r896006 * r896007;
double r896009 = t;
double r896010 = r896008 * r896009;
double r896011 = 16.0;
double r896012 = r896010 / r896011;
double r896013 = cos(r896012);
double r896014 = r896001 * r896013;
double r896015 = a;
double r896016 = r896015 * r896003;
double r896017 = r896016 + r896005;
double r896018 = b;
double r896019 = r896017 * r896018;
double r896020 = r896019 * r896009;
double r896021 = r896020 / r896011;
double r896022 = cos(r896021);
double r896023 = r896014 * r896022;
return r896023;
}
double f(double x, double __attribute__((unused)) y, double __attribute__((unused)) z, double t, double a, double b) {
double r896024 = b;
double r896025 = 6.980793815325519e+74;
bool r896026 = r896024 <= r896025;
double r896027 = x;
double r896028 = 0.0;
double r896029 = 16.0;
double r896030 = r896028 / r896029;
double r896031 = cos(r896030);
double r896032 = r896027 * r896031;
double r896033 = a;
double r896034 = 2.0;
double r896035 = 1.0;
double r896036 = fma(r896033, r896034, r896035);
double r896037 = t;
double r896038 = r896024 * r896037;
double r896039 = r896036 * r896038;
double r896040 = cbrt(r896029);
double r896041 = r896039 / r896040;
double r896042 = r896041 / r896040;
double r896043 = 0.3333333333333333;
double r896044 = pow(r896029, r896043);
double r896045 = r896042 / r896044;
double r896046 = cos(r896045);
double r896047 = r896032 * r896046;
double r896048 = 1.0;
double r896049 = r896032 * r896048;
double r896050 = r896026 ? r896047 : r896049;
return r896050;
}




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.5 |
| Herbie | 44.8 |
if b < 6.980793815325519e+74Initial program 44.0
Taylor expanded around 0 43.2
rmApplied add-cube-cbrt43.2
Applied associate-/r*43.2
Simplified43.0
rmApplied pow1/343.0
if 6.980793815325519e+74 < b Initial program 55.9
Taylor expanded around 0 55.7
Taylor expanded around 0 52.5
Final simplification44.8
herbie shell --seed 2020020 +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))))