\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 \cos \left(\frac{0}{16}\right)\right) \cdot \sqrt[3]{1}\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \cos \left(\frac{\left(y \cdot 2 + 1\right) \cdot \left(z \cdot t\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 r926036 = x;
double r926037 = y;
double r926038 = 2.0;
double r926039 = r926037 * r926038;
double r926040 = 1.0;
double r926041 = r926039 + r926040;
double r926042 = z;
double r926043 = r926041 * r926042;
double r926044 = t;
double r926045 = r926043 * r926044;
double r926046 = 16.0;
double r926047 = r926045 / r926046;
double r926048 = cos(r926047);
double r926049 = r926036 * r926048;
double r926050 = a;
double r926051 = r926050 * r926038;
double r926052 = r926051 + r926040;
double r926053 = b;
double r926054 = r926052 * r926053;
double r926055 = r926054 * r926044;
double r926056 = r926055 / r926046;
double r926057 = cos(r926056);
double r926058 = r926049 * r926057;
return r926058;
}
double f(double x, double y, double z, double t, double a, double b) {
double r926059 = t;
double r926060 = -2.060669677199602e-68;
bool r926061 = r926059 <= r926060;
double r926062 = 2.298617900197692e-208;
bool r926063 = r926059 <= r926062;
double r926064 = !r926063;
bool r926065 = r926061 || r926064;
double r926066 = x;
double r926067 = 0.0;
double r926068 = 16.0;
double r926069 = r926067 / r926068;
double r926070 = cos(r926069);
double r926071 = r926066 * r926070;
double r926072 = 1.0;
double r926073 = cbrt(r926072);
double r926074 = r926071 * r926073;
double r926075 = y;
double r926076 = 2.0;
double r926077 = r926075 * r926076;
double r926078 = 1.0;
double r926079 = r926077 + r926078;
double r926080 = z;
double r926081 = r926080 * r926059;
double r926082 = r926079 * r926081;
double r926083 = r926082 / r926068;
double r926084 = cos(r926083);
double r926085 = r926066 * r926084;
double r926086 = a;
double r926087 = r926086 * r926076;
double r926088 = r926087 + r926078;
double r926089 = b;
double r926090 = r926088 * r926089;
double r926091 = r926090 * r926059;
double r926092 = r926091 / r926068;
double r926093 = cos(r926092);
double r926094 = r926085 * r926093;
double r926095 = r926065 ? r926074 : r926094;
return r926095;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| 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
rmApplied associate-*l*27.3
Final simplification44.3
herbie shell --seed 2019354
(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))))