\frac{x \cdot y - z \cdot t}{a}\begin{array}{l}
\mathbf{if}\;x \cdot y - z \cdot t \le -1.35814929359811122012683914750974806748 \cdot 10^{213}:\\
\;\;\;\;\left(\frac{x}{a} \cdot y - \frac{t}{a} \cdot z\right) + \mathsf{fma}\left(-\frac{t}{a}, z, \frac{t}{a} \cdot z\right)\\
\mathbf{elif}\;x \cdot y - z \cdot t \le 1.304590199957326978034100659392854141042 \cdot 10^{142}:\\
\;\;\;\;\frac{1}{a} \cdot \left(x \cdot y - z \cdot t\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x}{a} \cdot y - \frac{t}{a} \cdot z\right) + \mathsf{fma}\left(-\frac{t}{a}, z, \frac{t}{a} \cdot z\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r34936051 = x;
double r34936052 = y;
double r34936053 = r34936051 * r34936052;
double r34936054 = z;
double r34936055 = t;
double r34936056 = r34936054 * r34936055;
double r34936057 = r34936053 - r34936056;
double r34936058 = a;
double r34936059 = r34936057 / r34936058;
return r34936059;
}
double f(double x, double y, double z, double t, double a) {
double r34936060 = x;
double r34936061 = y;
double r34936062 = r34936060 * r34936061;
double r34936063 = z;
double r34936064 = t;
double r34936065 = r34936063 * r34936064;
double r34936066 = r34936062 - r34936065;
double r34936067 = -1.3581492935981112e+213;
bool r34936068 = r34936066 <= r34936067;
double r34936069 = a;
double r34936070 = r34936060 / r34936069;
double r34936071 = r34936070 * r34936061;
double r34936072 = r34936064 / r34936069;
double r34936073 = r34936072 * r34936063;
double r34936074 = r34936071 - r34936073;
double r34936075 = -r34936072;
double r34936076 = fma(r34936075, r34936063, r34936073);
double r34936077 = r34936074 + r34936076;
double r34936078 = 1.304590199957327e+142;
bool r34936079 = r34936066 <= r34936078;
double r34936080 = 1.0;
double r34936081 = r34936080 / r34936069;
double r34936082 = r34936081 * r34936066;
double r34936083 = r34936079 ? r34936082 : r34936077;
double r34936084 = r34936068 ? r34936077 : r34936083;
return r34936084;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 7.7 |
|---|---|
| Target | 5.9 |
| Herbie | 1.4 |
if (- (* x y) (* z t)) < -1.3581492935981112e+213 or 1.304590199957327e+142 < (- (* x y) (* z t)) Initial program 24.4
rmApplied div-sub24.4
rmApplied *-un-lft-identity24.4
Applied times-frac14.2
Applied add-cube-cbrt14.5
Applied times-frac2.4
Applied prod-diff2.4
Taylor expanded around inf 24.9
Simplified2.2
if -1.3581492935981112e+213 < (- (* x y) (* z t)) < 1.304590199957327e+142Initial program 1.0
rmApplied div-sub1.0
rmApplied div-inv1.0
Applied div-inv1.0
Applied distribute-rgt-out--1.0
Final simplification1.4
herbie shell --seed 2019192 +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))