\frac{x \cdot y - z \cdot t}{a}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -1.01414647933800124 \cdot 10^{166}:\\
\;\;\;\;x \cdot \frac{y}{a} - \frac{\frac{t}{a}}{\frac{1}{z}}\\
\mathbf{elif}\;x \cdot y \le -3.21143 \cdot 10^{-322}:\\
\;\;\;\;\frac{x \cdot y}{a} - \left(\sqrt[3]{z} \cdot \sqrt[3]{z}\right) \cdot \frac{t}{\frac{a}{\sqrt[3]{z}}}\\
\mathbf{elif}\;x \cdot y \le 8.1013163874093183 \cdot 10^{-125}:\\
\;\;\;\;\frac{x}{\frac{a}{y}} - \frac{t \cdot z}{a}\\
\mathbf{elif}\;x \cdot y \le 2.31552892253560307 \cdot 10^{114}:\\
\;\;\;\;\frac{x \cdot y}{a} + \left(-\frac{t}{\frac{a}{z}}\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{y}{a} - \frac{\frac{t}{a}}{\frac{1}{z}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r971888 = x;
double r971889 = y;
double r971890 = r971888 * r971889;
double r971891 = z;
double r971892 = t;
double r971893 = r971891 * r971892;
double r971894 = r971890 - r971893;
double r971895 = a;
double r971896 = r971894 / r971895;
return r971896;
}
double f(double x, double y, double z, double t, double a) {
double r971897 = x;
double r971898 = y;
double r971899 = r971897 * r971898;
double r971900 = -1.0141464793380012e+166;
bool r971901 = r971899 <= r971900;
double r971902 = a;
double r971903 = r971898 / r971902;
double r971904 = r971897 * r971903;
double r971905 = t;
double r971906 = r971905 / r971902;
double r971907 = 1.0;
double r971908 = z;
double r971909 = r971907 / r971908;
double r971910 = r971906 / r971909;
double r971911 = r971904 - r971910;
double r971912 = -3.2114266979681e-322;
bool r971913 = r971899 <= r971912;
double r971914 = r971899 / r971902;
double r971915 = cbrt(r971908);
double r971916 = r971915 * r971915;
double r971917 = r971902 / r971915;
double r971918 = r971905 / r971917;
double r971919 = r971916 * r971918;
double r971920 = r971914 - r971919;
double r971921 = 8.101316387409318e-125;
bool r971922 = r971899 <= r971921;
double r971923 = r971902 / r971898;
double r971924 = r971897 / r971923;
double r971925 = r971905 * r971908;
double r971926 = r971925 / r971902;
double r971927 = r971924 - r971926;
double r971928 = 2.315528922535603e+114;
bool r971929 = r971899 <= r971928;
double r971930 = r971902 / r971908;
double r971931 = r971905 / r971930;
double r971932 = -r971931;
double r971933 = r971914 + r971932;
double r971934 = r971929 ? r971933 : r971911;
double r971935 = r971922 ? r971927 : r971934;
double r971936 = r971913 ? r971920 : r971935;
double r971937 = r971901 ? r971911 : r971936;
return r971937;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 7.7 |
|---|---|
| Target | 6.2 |
| Herbie | 4.3 |
if (* x y) < -1.0141464793380012e+166 or 2.315528922535603e+114 < (* x y) Initial program 21.8
rmApplied div-sub21.8
Simplified21.8
rmApplied associate-/l*18.7
rmApplied div-inv18.7
Applied associate-/r*19.1
rmApplied *-un-lft-identity19.1
Applied times-frac3.2
Simplified3.2
if -1.0141464793380012e+166 < (* x y) < -3.2114266979681e-322Initial program 4.0
rmApplied div-sub4.0
Simplified4.0
rmApplied associate-/l*5.1
rmApplied add-cube-cbrt5.6
Applied *-un-lft-identity5.6
Applied times-frac5.6
Applied *-un-lft-identity5.6
Applied times-frac4.4
Simplified4.4
if -3.2114266979681e-322 < (* x y) < 8.101316387409318e-125Initial program 4.7
rmApplied div-sub4.7
Simplified4.7
rmApplied associate-/l*4.8
if 8.101316387409318e-125 < (* x y) < 2.315528922535603e+114Initial program 3.5
rmApplied div-sub3.5
Simplified3.5
rmApplied associate-/l*4.8
rmApplied sub-neg4.8
Final simplification4.3
herbie shell --seed 2020036
(FPCore (x y z t a)
:name "Data.Colour.Matrix:inverse from colour-2.3.3, B"
:precision binary64
:herbie-target
(if (< z -2.468684968699548e+170) (- (* (/ y a) x) (* (/ t a) z)) (if (< z 6.309831121978371e-71) (/ (- (* x y) (* z t)) a) (- (* (/ y a) x) (* (/ t a) z))))
(/ (- (* x y) (* z t)) a))