\frac{x \cdot y - z \cdot t}{a}\begin{array}{l}
\mathbf{if}\;y \cdot x - z \cdot t = -\infty:\\
\;\;\;\;\mathsf{fma}\left(\frac{-t}{\sqrt[3]{a}}, \frac{z}{\sqrt[3]{a} \cdot \sqrt[3]{a}}, \frac{z}{\sqrt[3]{a} \cdot \sqrt[3]{a}} \cdot \frac{t}{\sqrt[3]{a}}\right) + \mathsf{fma}\left(x, \frac{y}{a}, \frac{-\sqrt[3]{t} \cdot \sqrt[3]{t}}{\sqrt[3]{\sqrt[3]{a} \cdot \sqrt[3]{a}}} \cdot \left(\frac{\sqrt[3]{t}}{\sqrt[3]{\sqrt[3]{a}}} \cdot \frac{z}{\sqrt[3]{a} \cdot \sqrt[3]{a}}\right)\right)\\
\mathbf{elif}\;y \cdot x - z \cdot t \le 6.415733537003891 \cdot 10^{+276}:\\
\;\;\;\;\frac{1}{a} \cdot \left(y \cdot x - z \cdot t\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{-t}{\sqrt[3]{a}}, \frac{z}{\sqrt[3]{a} \cdot \sqrt[3]{a}}, \frac{z}{\sqrt[3]{a} \cdot \sqrt[3]{a}} \cdot \frac{t}{\sqrt[3]{a}}\right) + \mathsf{fma}\left(x, \frac{y}{a}, \frac{-t}{\sqrt[3]{a}} \cdot \frac{z}{\sqrt[3]{a} \cdot \sqrt[3]{a}}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r38697934 = x;
double r38697935 = y;
double r38697936 = r38697934 * r38697935;
double r38697937 = z;
double r38697938 = t;
double r38697939 = r38697937 * r38697938;
double r38697940 = r38697936 - r38697939;
double r38697941 = a;
double r38697942 = r38697940 / r38697941;
return r38697942;
}
double f(double x, double y, double z, double t, double a) {
double r38697943 = y;
double r38697944 = x;
double r38697945 = r38697943 * r38697944;
double r38697946 = z;
double r38697947 = t;
double r38697948 = r38697946 * r38697947;
double r38697949 = r38697945 - r38697948;
double r38697950 = -inf.0;
bool r38697951 = r38697949 <= r38697950;
double r38697952 = -r38697947;
double r38697953 = a;
double r38697954 = cbrt(r38697953);
double r38697955 = r38697952 / r38697954;
double r38697956 = r38697954 * r38697954;
double r38697957 = r38697946 / r38697956;
double r38697958 = r38697947 / r38697954;
double r38697959 = r38697957 * r38697958;
double r38697960 = fma(r38697955, r38697957, r38697959);
double r38697961 = r38697943 / r38697953;
double r38697962 = cbrt(r38697947);
double r38697963 = r38697962 * r38697962;
double r38697964 = -r38697963;
double r38697965 = cbrt(r38697956);
double r38697966 = r38697964 / r38697965;
double r38697967 = cbrt(r38697954);
double r38697968 = r38697962 / r38697967;
double r38697969 = r38697968 * r38697957;
double r38697970 = r38697966 * r38697969;
double r38697971 = fma(r38697944, r38697961, r38697970);
double r38697972 = r38697960 + r38697971;
double r38697973 = 6.415733537003891e+276;
bool r38697974 = r38697949 <= r38697973;
double r38697975 = 1.0;
double r38697976 = r38697975 / r38697953;
double r38697977 = r38697976 * r38697949;
double r38697978 = r38697955 * r38697957;
double r38697979 = fma(r38697944, r38697961, r38697978);
double r38697980 = r38697960 + r38697979;
double r38697981 = r38697974 ? r38697977 : r38697980;
double r38697982 = r38697951 ? r38697972 : r38697981;
return r38697982;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 7.2 |
|---|---|
| Target | 5.7 |
| Herbie | 1.0 |
if (- (* x y) (* z t)) < -inf.0Initial program 59.9
rmApplied div-sub59.9
rmApplied add-cube-cbrt59.9
Applied times-frac30.4
Applied *-un-lft-identity30.4
Applied times-frac0.8
Applied prod-diff0.8
rmApplied add-cube-cbrt0.8
Applied cbrt-prod0.8
Applied add-cube-cbrt0.9
Applied times-frac0.9
Applied associate-*l*0.9
if -inf.0 < (- (* x y) (* z t)) < 6.415733537003891e+276Initial program 0.9
rmApplied div-sub0.9
rmApplied div-inv0.9
Applied div-inv1.0
Applied distribute-rgt-out--1.0
if 6.415733537003891e+276 < (- (* x y) (* z t)) Initial program 48.0
rmApplied div-sub48.0
rmApplied add-cube-cbrt48.1
Applied times-frac26.4
Applied *-un-lft-identity26.4
Applied times-frac0.8
Applied prod-diff0.8
Final simplification1.0
herbie shell --seed 2019164 +o rules:numerics
(FPCore (x y z t a)
:name "Data.Colour.Matrix:inverse from colour-2.3.3, B"
: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))