\left(x - \frac{y}{z \cdot 3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}\mathsf{fma}\left(1, x, \frac{-\frac{y}{3}}{z}\right) + \frac{\frac{t}{z}}{y \cdot 3}double f(double x, double y, double z, double t) {
double r965145 = x;
double r965146 = y;
double r965147 = z;
double r965148 = 3.0;
double r965149 = r965147 * r965148;
double r965150 = r965146 / r965149;
double r965151 = r965145 - r965150;
double r965152 = t;
double r965153 = r965149 * r965146;
double r965154 = r965152 / r965153;
double r965155 = r965151 + r965154;
return r965155;
}
double f(double x, double y, double z, double t) {
double r965156 = 1.0;
double r965157 = x;
double r965158 = y;
double r965159 = 3.0;
double r965160 = r965158 / r965159;
double r965161 = -r965160;
double r965162 = z;
double r965163 = r965161 / r965162;
double r965164 = fma(r965156, r965157, r965163);
double r965165 = t;
double r965166 = r965165 / r965162;
double r965167 = r965158 * r965159;
double r965168 = r965166 / r965167;
double r965169 = r965164 + r965168;
return r965169;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 3.7 |
|---|---|
| Target | 1.6 |
| Herbie | 1.6 |
Initial program 3.7
rmApplied associate-/r*1.6
rmApplied associate-/r*1.6
rmApplied *-un-lft-identity1.6
Applied fma-neg1.6
Simplified1.6
rmApplied div-inv1.6
Applied associate-/l*1.6
Simplified1.6
Final simplification1.6
herbie shell --seed 2020042 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, H"
:precision binary64
:herbie-target
(+ (- x (/ y (* z 3))) (/ (/ t (* z 3)) y))
(+ (- x (/ y (* z 3))) (/ t (* (* z 3) y))))