\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 r904532 = x;
double r904533 = y;
double r904534 = r904532 * r904533;
double r904535 = z;
double r904536 = t;
double r904537 = r904535 * r904536;
double r904538 = r904534 - r904537;
double r904539 = a;
double r904540 = r904538 / r904539;
return r904540;
}
double f(double x, double y, double z, double t, double a) {
double r904541 = x;
double r904542 = y;
double r904543 = r904541 * r904542;
double r904544 = -1.0141464793380012e+166;
bool r904545 = r904543 <= r904544;
double r904546 = 1.0;
double r904547 = r904541 / r904546;
double r904548 = a;
double r904549 = r904542 / r904548;
double r904550 = t;
double r904551 = r904550 / r904548;
double r904552 = sqrt(r904546);
double r904553 = z;
double r904554 = r904552 / r904553;
double r904555 = r904551 / r904554;
double r904556 = r904552 / r904546;
double r904557 = r904546 / r904556;
double r904558 = r904555 * r904557;
double r904559 = -r904558;
double r904560 = fma(r904547, r904549, r904559);
double r904561 = -r904555;
double r904562 = fma(r904561, r904557, r904558);
double r904563 = r904560 + r904562;
double r904564 = -3.2114266979681e-322;
bool r904565 = r904543 <= r904564;
double r904566 = r904543 / r904548;
double r904567 = cbrt(r904553);
double r904568 = r904567 * r904567;
double r904569 = r904548 / r904567;
double r904570 = r904550 / r904569;
double r904571 = r904568 * r904570;
double r904572 = r904566 - r904571;
double r904573 = 8.101316387409318e-125;
bool r904574 = r904543 <= r904573;
double r904575 = r904548 / r904542;
double r904576 = r904541 / r904575;
double r904577 = r904550 * r904553;
double r904578 = r904577 / r904548;
double r904579 = r904576 - r904578;
double r904580 = 2.315528922535603e+114;
bool r904581 = r904543 <= r904580;
double r904582 = r904548 / r904553;
double r904583 = r904550 / r904582;
double r904584 = r904566 - r904583;
double r904585 = r904546 * r904584;
double r904586 = r904581 ? r904585 : r904563;
double r904587 = r904574 ? r904579 : r904586;
double r904588 = r904565 ? r904572 : r904587;
double r904589 = r904545 ? r904563 : r904588;
return r904589;
}




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))