\frac{x \cdot y - z \cdot t}{a}\begin{array}{l}
\mathbf{if}\;x \cdot y \le -4.80424266986926131 \cdot 10^{306} \lor \neg \left(x \cdot y \le 3.18956358068375949 \cdot 10^{185}\right):\\
\;\;\;\;\left(-\frac{t \cdot z}{a}\right) + y \cdot \frac{x}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{a}{x \cdot y - z \cdot t}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r605104 = x;
double r605105 = y;
double r605106 = r605104 * r605105;
double r605107 = z;
double r605108 = t;
double r605109 = r605107 * r605108;
double r605110 = r605106 - r605109;
double r605111 = a;
double r605112 = r605110 / r605111;
return r605112;
}
double f(double x, double y, double z, double t, double a) {
double r605113 = x;
double r605114 = y;
double r605115 = r605113 * r605114;
double r605116 = -4.804242669869261e+306;
bool r605117 = r605115 <= r605116;
double r605118 = 3.1895635806837595e+185;
bool r605119 = r605115 <= r605118;
double r605120 = !r605119;
bool r605121 = r605117 || r605120;
double r605122 = t;
double r605123 = z;
double r605124 = r605122 * r605123;
double r605125 = a;
double r605126 = r605124 / r605125;
double r605127 = -r605126;
double r605128 = r605113 / r605125;
double r605129 = r605114 * r605128;
double r605130 = r605127 + r605129;
double r605131 = 1.0;
double r605132 = r605123 * r605122;
double r605133 = r605115 - r605132;
double r605134 = r605125 / r605133;
double r605135 = r605131 / r605134;
double r605136 = r605121 ? r605130 : r605135;
return r605136;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 7.6 |
|---|---|
| Target | 6.3 |
| Herbie | 4.7 |
if (* x y) < -4.804242669869261e+306 or 3.1895635806837595e+185 < (* x y) Initial program 38.1
rmApplied clear-num38.2
rmApplied div-inv38.2
Applied add-cube-cbrt38.2
Applied times-frac38.2
Simplified38.2
Simplified38.2
rmApplied fma-udef38.2
Applied distribute-lft-in38.2
Simplified38.2
Simplified7.9
if -4.804242669869261e+306 < (* x y) < 3.1895635806837595e+185Initial program 4.1
rmApplied clear-num4.4
Final simplification4.7
herbie shell --seed 2019199 +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))