2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}double f(double x, double y, double z) {
double r3827 = 2.0;
double r3828 = x;
double r3829 = y;
double r3830 = r3828 * r3829;
double r3831 = z;
double r3832 = r3828 * r3831;
double r3833 = r3830 + r3832;
double r3834 = r3829 * r3831;
double r3835 = r3833 + r3834;
double r3836 = sqrt(r3835);
double r3837 = r3827 * r3836;
return r3837;
}
double f(double x, double y, double z) {
double r3838 = 2.0;
double r3839 = x;
double r3840 = y;
double r3841 = r3839 * r3840;
double r3842 = z;
double r3843 = r3839 * r3842;
double r3844 = r3841 + r3843;
double r3845 = r3840 * r3842;
double r3846 = r3844 + r3845;
double r3847 = sqrt(r3846);
double r3848 = r3838 * r3847;
return r3848;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 19.5 |
|---|---|
| Target | 19.0 |
| Herbie | 19.5 |
Initial program 19.5
Final simplification19.5
herbie shell --seed 2020025 +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)))))