2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}\sqrt{\mathsf{fma}\left(y, z, x \cdot \left(y + z\right)\right)} \cdot 2double f(double x, double y, double z) {
double r439978 = 2.0;
double r439979 = x;
double r439980 = y;
double r439981 = r439979 * r439980;
double r439982 = z;
double r439983 = r439979 * r439982;
double r439984 = r439981 + r439983;
double r439985 = r439980 * r439982;
double r439986 = r439984 + r439985;
double r439987 = sqrt(r439986);
double r439988 = r439978 * r439987;
return r439988;
}
double f(double x, double y, double z) {
double r439989 = y;
double r439990 = z;
double r439991 = x;
double r439992 = r439989 + r439990;
double r439993 = r439991 * r439992;
double r439994 = fma(r439989, r439990, r439993);
double r439995 = sqrt(r439994);
double r439996 = 2.0;
double r439997 = r439995 * r439996;
return r439997;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 19.9 |
|---|---|
| Target | 19.0 |
| Herbie | 19.9 |
Initial program 19.9
Simplified19.9
Final simplification19.9
herbie shell --seed 2020043 +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)))))