2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\sqrt{\mathsf{fma}\left(y, z, x \cdot y + x \cdot z\right)} \cdot 2double f(double x, double y, double z) {
double r463596 = 2.0;
double r463597 = x;
double r463598 = y;
double r463599 = r463597 * r463598;
double r463600 = z;
double r463601 = r463597 * r463600;
double r463602 = r463599 + r463601;
double r463603 = r463598 * r463600;
double r463604 = r463602 + r463603;
double r463605 = sqrt(r463604);
double r463606 = r463596 * r463605;
return r463606;
}
double f(double x, double y, double z) {
double r463607 = y;
double r463608 = z;
double r463609 = x;
double r463610 = r463609 * r463607;
double r463611 = r463609 * r463608;
double r463612 = r463610 + r463611;
double r463613 = fma(r463607, r463608, r463612);
double r463614 = sqrt(r463613);
double r463615 = 2.0;
double r463616 = r463614 * r463615;
return r463616;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 19.8 |
|---|---|
| Target | 19.2 |
| Herbie | 19.8 |
Initial program 19.8
Simplified19.8
rmApplied distribute-lft-in19.8
Final simplification19.8
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.TwoD.Apollonian:descartes from diagrams-contrib-1.3.0.5"
:precision binary64
:herbie-target
(if (< z 7.636950090573675e+176) (* 2 (sqrt (+ (* (+ x y) z) (* x y)))) (* (* (+ (* 0.25 (* (* (pow y -0.75) (* (pow z -0.75) x)) (+ y z))) (* (pow z 0.25) (pow y 0.25))) (+ (* 0.25 (* (* (pow y -0.75) (* (pow z -0.75) x)) (+ y z))) (* (pow z 0.25) (pow y 0.25)))) 2))
(* 2 (sqrt (+ (+ (* x y) (* x z)) (* y z)))))