\frac{x \cdot y - z \cdot t}{a}\begin{array}{l}
\mathbf{if}\;x \cdot y - z \cdot t = -\infty \lor \neg \left(x \cdot y - z \cdot t \le 6.2962358828876013 \cdot 10^{295}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{\sqrt[3]{a} \cdot \sqrt[3]{a}}, \frac{y}{\sqrt[3]{a}}, -\frac{z}{\sqrt[3]{a}} \cdot \frac{t}{\sqrt[3]{a} \cdot \sqrt[3]{a}}\right) + \frac{t}{\sqrt[3]{a} \cdot \sqrt[3]{a}} \cdot \left(\left(-\frac{z}{\sqrt[3]{a}}\right) + \frac{z}{\sqrt[3]{a}}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot y}{a} - \left(t \cdot z\right) \cdot \frac{1}{a}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r876287 = x;
double r876288 = y;
double r876289 = r876287 * r876288;
double r876290 = z;
double r876291 = t;
double r876292 = r876290 * r876291;
double r876293 = r876289 - r876292;
double r876294 = a;
double r876295 = r876293 / r876294;
return r876295;
}
double f(double x, double y, double z, double t, double a) {
double r876296 = x;
double r876297 = y;
double r876298 = r876296 * r876297;
double r876299 = z;
double r876300 = t;
double r876301 = r876299 * r876300;
double r876302 = r876298 - r876301;
double r876303 = -inf.0;
bool r876304 = r876302 <= r876303;
double r876305 = 6.296235882887601e+295;
bool r876306 = r876302 <= r876305;
double r876307 = !r876306;
bool r876308 = r876304 || r876307;
double r876309 = a;
double r876310 = cbrt(r876309);
double r876311 = r876310 * r876310;
double r876312 = r876296 / r876311;
double r876313 = r876297 / r876310;
double r876314 = r876299 / r876310;
double r876315 = r876300 / r876311;
double r876316 = r876314 * r876315;
double r876317 = -r876316;
double r876318 = fma(r876312, r876313, r876317);
double r876319 = -r876314;
double r876320 = r876319 + r876314;
double r876321 = r876315 * r876320;
double r876322 = r876318 + r876321;
double r876323 = r876298 / r876309;
double r876324 = r876300 * r876299;
double r876325 = 1.0;
double r876326 = r876325 / r876309;
double r876327 = r876324 * r876326;
double r876328 = r876323 - r876327;
double r876329 = r876308 ? r876322 : r876328;
return r876329;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 7.3 |
|---|---|
| Target | 5.6 |
| Herbie | 0.9 |
if (- (* x y) (* z t)) < -inf.0 or 6.296235882887601e+295 < (- (* x y) (* z t)) Initial program 59.9
rmApplied div-sub59.9
Simplified59.9
rmApplied add-cube-cbrt60.0
Applied times-frac31.8
Applied add-cube-cbrt31.8
Applied times-frac1.3
Applied prod-diff1.3
Simplified1.3
if -inf.0 < (- (* x y) (* z t)) < 6.296235882887601e+295Initial program 0.8
rmApplied div-sub0.8
Simplified0.8
rmApplied div-inv0.9
Final simplification0.9
herbie shell --seed 2020035 +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))