\frac{x \cdot y - z \cdot t}{a}\frac{\mathsf{fma}\left(-t, z, y \cdot x\right)}{a}double f(double x, double y, double z, double t, double a) {
double r549849 = x;
double r549850 = y;
double r549851 = r549849 * r549850;
double r549852 = z;
double r549853 = t;
double r549854 = r549852 * r549853;
double r549855 = r549851 - r549854;
double r549856 = a;
double r549857 = r549855 / r549856;
return r549857;
}
double f(double x, double y, double z, double t, double a) {
double r549858 = t;
double r549859 = -r549858;
double r549860 = z;
double r549861 = y;
double r549862 = x;
double r549863 = r549861 * r549862;
double r549864 = fma(r549859, r549860, r549863);
double r549865 = a;
double r549866 = r549864 / r549865;
return r549866;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 7.8 |
|---|---|
| Target | 6.2 |
| Herbie | 7.8 |
Initial program 7.8
rmApplied clear-num8.0
rmApplied *-un-lft-identity8.0
Applied *-un-lft-identity8.0
Applied times-frac8.0
Applied add-cube-cbrt8.0
Applied times-frac8.0
Simplified8.0
Simplified7.8
Final simplification7.8
herbie shell --seed 2019209 +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.46868496869954822e170) (- (* (/ y a) x) (* (/ t a) z)) (if (< z 6.30983112197837121e-71) (/ (- (* x y) (* z t)) a) (- (* (/ y a) x) (* (/ t a) z))))
(/ (- (* x y) (* z t)) a))