\frac{x \cdot y - z \cdot t}{a}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -1.01414647933800124 \cdot 10^{166}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{1}, \frac{y}{a}, -\frac{\frac{t}{a}}{\frac{\sqrt{1}}{z}} \cdot \frac{1}{\frac{\sqrt{1}}{1}}\right) + \mathsf{fma}\left(-\frac{\frac{t}{a}}{\frac{\sqrt{1}}{z}}, \frac{1}{\frac{\sqrt{1}}{1}}, \frac{\frac{t}{a}}{\frac{\sqrt{1}}{z}} \cdot \frac{1}{\frac{\sqrt{1}}{1}}\right)\\
\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}:\\
\;\;\;\;1 \cdot \left(\frac{x \cdot y}{a} - \frac{t}{\frac{a}{z}}\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{1}, \frac{y}{a}, -\frac{\frac{t}{a}}{\frac{\sqrt{1}}{z}} \cdot \frac{1}{\frac{\sqrt{1}}{1}}\right) + \mathsf{fma}\left(-\frac{\frac{t}{a}}{\frac{\sqrt{1}}{z}}, \frac{1}{\frac{\sqrt{1}}{1}}, \frac{\frac{t}{a}}{\frac{\sqrt{1}}{z}} \cdot \frac{1}{\frac{\sqrt{1}}{1}}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r923858 = x;
double r923859 = y;
double r923860 = r923858 * r923859;
double r923861 = z;
double r923862 = t;
double r923863 = r923861 * r923862;
double r923864 = r923860 - r923863;
double r923865 = a;
double r923866 = r923864 / r923865;
return r923866;
}
double f(double x, double y, double z, double t, double a) {
double r923867 = x;
double r923868 = y;
double r923869 = r923867 * r923868;
double r923870 = -1.0141464793380012e+166;
bool r923871 = r923869 <= r923870;
double r923872 = 1.0;
double r923873 = r923867 / r923872;
double r923874 = a;
double r923875 = r923868 / r923874;
double r923876 = t;
double r923877 = r923876 / r923874;
double r923878 = sqrt(r923872);
double r923879 = z;
double r923880 = r923878 / r923879;
double r923881 = r923877 / r923880;
double r923882 = r923878 / r923872;
double r923883 = r923872 / r923882;
double r923884 = r923881 * r923883;
double r923885 = -r923884;
double r923886 = fma(r923873, r923875, r923885);
double r923887 = -r923881;
double r923888 = fma(r923887, r923883, r923884);
double r923889 = r923886 + r923888;
double r923890 = -3.2114266979681e-322;
bool r923891 = r923869 <= r923890;
double r923892 = r923869 / r923874;
double r923893 = cbrt(r923879);
double r923894 = r923893 * r923893;
double r923895 = r923874 / r923893;
double r923896 = r923876 / r923895;
double r923897 = r923894 * r923896;
double r923898 = r923892 - r923897;
double r923899 = 8.101316387409318e-125;
bool r923900 = r923869 <= r923899;
double r923901 = r923874 / r923868;
double r923902 = r923867 / r923901;
double r923903 = r923876 * r923879;
double r923904 = r923903 / r923874;
double r923905 = r923902 - r923904;
double r923906 = 2.315528922535603e+114;
bool r923907 = r923869 <= r923906;
double r923908 = r923874 / r923879;
double r923909 = r923876 / r923908;
double r923910 = r923892 - r923909;
double r923911 = r923872 * r923910;
double r923912 = r923907 ? r923911 : r923889;
double r923913 = r923900 ? r923905 : r923912;
double r923914 = r923891 ? r923898 : r923913;
double r923915 = r923871 ? r923889 : r923914;
return r923915;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| 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 add-sqr-sqrt19.1
Applied times-frac19.1
Applied *-un-lft-identity19.1
Applied *-un-lft-identity19.1
Applied times-frac19.1
Applied times-frac19.1
Applied *-un-lft-identity19.1
Applied times-frac3.2
Applied prod-diff3.2
Simplified3.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 *-un-lft-identity4.8
Final simplification4.3
herbie shell --seed 2020036 +o rules:numerics
(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))