\frac{\left(x \cdot x + y \cdot y\right) - z \cdot z}{y \cdot 2}0.5 \cdot \left(\left(y + \frac{x}{\frac{y}{x}}\right) - \frac{z}{\frac{y}{z}}\right)double f(double x, double y, double z) {
double r705597 = x;
double r705598 = r705597 * r705597;
double r705599 = y;
double r705600 = r705599 * r705599;
double r705601 = r705598 + r705600;
double r705602 = z;
double r705603 = r705602 * r705602;
double r705604 = r705601 - r705603;
double r705605 = 2.0;
double r705606 = r705599 * r705605;
double r705607 = r705604 / r705606;
return r705607;
}
double f(double x, double y, double z) {
double r705608 = 0.5;
double r705609 = y;
double r705610 = x;
double r705611 = r705609 / r705610;
double r705612 = r705610 / r705611;
double r705613 = r705609 + r705612;
double r705614 = z;
double r705615 = r705609 / r705614;
double r705616 = r705614 / r705615;
double r705617 = r705613 - r705616;
double r705618 = r705608 * r705617;
return r705618;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 29.3 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
Initial program 29.3
Taylor expanded around 0 12.8
Simplified12.8
rmApplied unpow212.8
Applied associate-/l*6.9
rmApplied unpow26.9
Applied associate-/l*0.1
Final simplification0.1
herbie shell --seed 2020036
(FPCore (x y z)
:name "Diagrams.TwoD.Apollonian:initialConfig from diagrams-contrib-1.3.0.5, A"
:precision binary64
:herbie-target
(- (* y 0.5) (* (* (/ 0.5 y) (+ z x)) (- z x)))
(/ (- (+ (* x x) (* y y)) (* z z)) (* y 2)))