\frac{\left(x \cdot x + y \cdot y\right) - z \cdot z}{y \cdot 2}\frac{y + \left(x + z\right) \cdot \frac{x - z}{y}}{2}double f(double x, double y, double z) {
double r434496 = x;
double r434497 = r434496 * r434496;
double r434498 = y;
double r434499 = r434498 * r434498;
double r434500 = r434497 + r434499;
double r434501 = z;
double r434502 = r434501 * r434501;
double r434503 = r434500 - r434502;
double r434504 = 2.0;
double r434505 = r434498 * r434504;
double r434506 = r434503 / r434505;
return r434506;
}
double f(double x, double y, double z) {
double r434507 = y;
double r434508 = x;
double r434509 = z;
double r434510 = r434508 + r434509;
double r434511 = r434508 - r434509;
double r434512 = r434511 / r434507;
double r434513 = r434510 * r434512;
double r434514 = r434507 + r434513;
double r434515 = 2.0;
double r434516 = r434514 / r434515;
return r434516;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 28.7 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
Initial program 28.7
Simplified12.6
rmApplied *-un-lft-identity12.6
Applied difference-of-squares12.6
Applied times-frac0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019235 +o rules:numerics
(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)))