\frac{\left(x \cdot x + y \cdot y\right) - z \cdot z}{y \cdot 2}\frac{y + \frac{x + z}{\frac{y}{x - z}}}{2}double f(double x, double y, double z) {
double r404677 = x;
double r404678 = r404677 * r404677;
double r404679 = y;
double r404680 = r404679 * r404679;
double r404681 = r404678 + r404680;
double r404682 = z;
double r404683 = r404682 * r404682;
double r404684 = r404681 - r404683;
double r404685 = 2.0;
double r404686 = r404679 * r404685;
double r404687 = r404684 / r404686;
return r404687;
}
double f(double x, double y, double z) {
double r404688 = y;
double r404689 = x;
double r404690 = z;
double r404691 = r404689 + r404690;
double r404692 = r404689 - r404690;
double r404693 = r404688 / r404692;
double r404694 = r404691 / r404693;
double r404695 = r404688 + r404694;
double r404696 = 2.0;
double r404697 = r404695 / r404696;
return r404697;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 27.8 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 27.8
Simplified12.6
rmApplied difference-of-squares12.6
Applied associate-/l*0.2
Final simplification0.2
herbie shell --seed 2019208
(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)))