2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}2 \cdot \sqrt{\mathsf{fma}\left(x, y + z, y \cdot z\right)}double f(double x, double y, double z) {
double r783436 = 2.0;
double r783437 = x;
double r783438 = y;
double r783439 = r783437 * r783438;
double r783440 = z;
double r783441 = r783437 * r783440;
double r783442 = r783439 + r783441;
double r783443 = r783438 * r783440;
double r783444 = r783442 + r783443;
double r783445 = sqrt(r783444);
double r783446 = r783436 * r783445;
return r783446;
}
double f(double x, double y, double z) {
double r783447 = 2.0;
double r783448 = x;
double r783449 = y;
double r783450 = z;
double r783451 = r783449 + r783450;
double r783452 = r783449 * r783450;
double r783453 = fma(r783448, r783451, r783452);
double r783454 = sqrt(r783453);
double r783455 = r783447 * r783454;
return r783455;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 20.0 |
|---|---|
| Target | 19.4 |
| Herbie | 20.0 |
Initial program 20.0
rmApplied distribute-lft-out20.0
Applied fma-def20.0
Final simplification20.0
herbie shell --seed 2020057 +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)))))