2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}2 \cdot \sqrt{\mathsf{fma}\left(y + x, z, x \cdot y\right)}double f(double x, double y, double z) {
double r453231 = 2.0;
double r453232 = x;
double r453233 = y;
double r453234 = r453232 * r453233;
double r453235 = z;
double r453236 = r453232 * r453235;
double r453237 = r453234 + r453236;
double r453238 = r453233 * r453235;
double r453239 = r453237 + r453238;
double r453240 = sqrt(r453239);
double r453241 = r453231 * r453240;
return r453241;
}
double f(double x, double y, double z) {
double r453242 = 2.0;
double r453243 = y;
double r453244 = x;
double r453245 = r453243 + r453244;
double r453246 = z;
double r453247 = r453244 * r453243;
double r453248 = fma(r453245, r453246, r453247);
double r453249 = sqrt(r453248);
double r453250 = r453242 * r453249;
return r453250;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 20.0 |
|---|---|
| Target | 19.0 |
| Herbie | 20.0 |
Initial program 20.0
Simplified20.0
Final simplification20.0
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.TwoD.Apollonian:descartes from diagrams-contrib-1.3.0.5"
:herbie-target
(if (< z 7.636950090573675e+176) (* 2.0 (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.0))
(* 2.0 (sqrt (+ (+ (* x y) (* x z)) (* y z)))))