\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\frac{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right)}{\left(x + 1\right) \cdot 1} - \frac{\frac{x}{t \cdot z - x}}{x + 1}double f(double x, double y, double z, double t) {
double r946561 = x;
double r946562 = y;
double r946563 = z;
double r946564 = r946562 * r946563;
double r946565 = r946564 - r946561;
double r946566 = t;
double r946567 = r946566 * r946563;
double r946568 = r946567 - r946561;
double r946569 = r946565 / r946568;
double r946570 = r946561 + r946569;
double r946571 = 1.0;
double r946572 = r946561 + r946571;
double r946573 = r946570 / r946572;
return r946573;
}
double f(double x, double y, double z, double t) {
double r946574 = y;
double r946575 = t;
double r946576 = z;
double r946577 = r946575 * r946576;
double r946578 = x;
double r946579 = r946577 - r946578;
double r946580 = r946574 / r946579;
double r946581 = fma(r946580, r946576, r946578);
double r946582 = 1.0;
double r946583 = r946578 + r946582;
double r946584 = 1.0;
double r946585 = r946583 * r946584;
double r946586 = r946581 / r946585;
double r946587 = r946578 / r946579;
double r946588 = r946587 / r946583;
double r946589 = r946586 - r946588;
return r946589;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.6 |
|---|---|
| Target | 0.4 |
| Herbie | 4.7 |
Initial program 7.6
rmApplied div-sub7.6
Applied associate-+r-7.6
Applied div-sub7.6
Simplified4.7
Final simplification4.7
herbie shell --seed 2020025 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, A"
:precision binary64
:herbie-target
(/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1)))