2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\sqrt{\mathsf{fma}\left(z, x, y \cdot \left(z + x\right)\right)} \cdot 2double f(double x, double y, double z) {
double r490982 = 2.0;
double r490983 = x;
double r490984 = y;
double r490985 = r490983 * r490984;
double r490986 = z;
double r490987 = r490983 * r490986;
double r490988 = r490985 + r490987;
double r490989 = r490984 * r490986;
double r490990 = r490988 + r490989;
double r490991 = sqrt(r490990);
double r490992 = r490982 * r490991;
return r490992;
}
double f(double x, double y, double z) {
double r490993 = z;
double r490994 = x;
double r490995 = y;
double r490996 = r490993 + r490994;
double r490997 = r490995 * r490996;
double r490998 = fma(r490993, r490994, r490997);
double r490999 = sqrt(r490998);
double r491000 = 2.0;
double r491001 = r490999 * r491000;
return r491001;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 19.8 |
|---|---|
| Target | 19.0 |
| Herbie | 19.8 |
Initial program 19.8
rmApplied *-un-lft-identity19.8
Applied sqrt-prod19.8
Simplified19.8
Simplified19.8
Final simplification19.8
herbie shell --seed 2019303 +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.6369500905736745e176) (* 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)))))