\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.683896174743997203487521349289828429351 \cdot 10^{-70}:\\
\;\;\;\;\cos \left(0.0625 \cdot \left(z \cdot t\right)\right) \cdot x\\
\mathbf{elif}\;t \le 2.712271615937073719503347788927402155894 \cdot 10^{-208}:\\
\;\;\;\;\left(x \cdot \left(\cos \left(0.0625 \cdot \left(z \cdot t\right)\right) \cdot \cos \left(\left(y \cdot \left(z \cdot t\right)\right) \cdot 0.125\right) - \sin \left(\left(y \cdot \left(z \cdot t\right)\right) \cdot 0.125\right) \cdot \sin \left(0.0625 \cdot \left(z \cdot t\right)\right)\right)\right) \cdot \cos \left(\frac{b}{\frac{\frac{16}{t}}{\mathsf{fma}\left(a, 2, 1\right)}}\right)\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r41591740 = x;
double r41591741 = y;
double r41591742 = 2.0;
double r41591743 = r41591741 * r41591742;
double r41591744 = 1.0;
double r41591745 = r41591743 + r41591744;
double r41591746 = z;
double r41591747 = r41591745 * r41591746;
double r41591748 = t;
double r41591749 = r41591747 * r41591748;
double r41591750 = 16.0;
double r41591751 = r41591749 / r41591750;
double r41591752 = cos(r41591751);
double r41591753 = r41591740 * r41591752;
double r41591754 = a;
double r41591755 = r41591754 * r41591742;
double r41591756 = r41591755 + r41591744;
double r41591757 = b;
double r41591758 = r41591756 * r41591757;
double r41591759 = r41591758 * r41591748;
double r41591760 = r41591759 / r41591750;
double r41591761 = cos(r41591760);
double r41591762 = r41591753 * r41591761;
return r41591762;
}
double f(double x, double y, double z, double t, double a, double b) {
double r41591763 = t;
double r41591764 = -1.6838961747439972e-70;
bool r41591765 = r41591763 <= r41591764;
double r41591766 = 0.0625;
double r41591767 = z;
double r41591768 = r41591767 * r41591763;
double r41591769 = r41591766 * r41591768;
double r41591770 = cos(r41591769);
double r41591771 = x;
double r41591772 = r41591770 * r41591771;
double r41591773 = 2.7122716159370737e-208;
bool r41591774 = r41591763 <= r41591773;
double r41591775 = y;
double r41591776 = r41591775 * r41591768;
double r41591777 = 0.125;
double r41591778 = r41591776 * r41591777;
double r41591779 = cos(r41591778);
double r41591780 = r41591770 * r41591779;
double r41591781 = sin(r41591778);
double r41591782 = sin(r41591769);
double r41591783 = r41591781 * r41591782;
double r41591784 = r41591780 - r41591783;
double r41591785 = r41591771 * r41591784;
double r41591786 = b;
double r41591787 = 16.0;
double r41591788 = r41591787 / r41591763;
double r41591789 = a;
double r41591790 = 2.0;
double r41591791 = 1.0;
double r41591792 = fma(r41591789, r41591790, r41591791);
double r41591793 = r41591788 / r41591792;
double r41591794 = r41591786 / r41591793;
double r41591795 = cos(r41591794);
double r41591796 = r41591785 * r41591795;
double r41591797 = r41591774 ? r41591796 : r41591771;
double r41591798 = r41591765 ? r41591772 : r41591797;
return r41591798;
}




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.6 |
|---|---|
| Target | 44.8 |
| Herbie | 44.5 |
if t < -1.6838961747439972e-70Initial program 57.0
Simplified57.1
Taylor expanded around inf 57.1
Simplified57.1
Taylor expanded around 0 55.8
Taylor expanded around 0 55.0
if -1.6838961747439972e-70 < t < 2.7122716159370737e-208Initial program 27.3
Simplified26.7
Taylor expanded around inf 26.8
Simplified26.0
rmApplied fma-udef26.0
Applied cos-sum26.0
if 2.7122716159370737e-208 < t Initial program 51.3
Simplified51.3
Taylor expanded around inf 51.3
Simplified51.1
Taylor expanded around 0 50.3
Taylor expanded around 0 48.7
Final simplification44.5
herbie shell --seed 2019168 +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))))