2 \cdot \sqrt{\left(x \cdot y + x \cdot z\right) + y \cdot z}2 \cdot \sqrt{z \cdot y + x \cdot \left(z + y\right)}(FPCore (x y z) :precision binary64 (* 2.0 (sqrt (+ (+ (* x y) (* x z)) (* y z)))))
(FPCore (x y z) :precision binary64 (* 2.0 (sqrt (+ (* z y) (* x (+ z y))))))
double code(double x, double y, double z) {
return 2.0 * sqrt(((x * y) + (x * z)) + (y * z));
}
double code(double x, double y, double z) {
return 2.0 * sqrt((z * y) + (x * (z + y)));
}













Bits error versus x













Bits error versus y













Bits error versus z
Results
| Original | 20.3 |
|---|---|
| Target | 19.6 |
| Herbie | 20.3 |
| Alternative 1 | |
|---|---|
| Error | 20.3 |
| Cost | 7104 |
| Alternative 2 | |
|---|---|
| Error | 25.9 |
| Cost | 7618 |
| Alternative 3 | |
|---|---|
| Error | 25.8 |
| Cost | 7304 |
| Alternative 4 | |
|---|---|
| Error | 25.9 |
| Cost | 7176 |
| Alternative 5 | |
|---|---|
| Error | 27.9 |
| Cost | 7176 |
| Alternative 6 | |
|---|---|
| Error | 40.0 |
| Cost | 7822 |
| Alternative 7 | |
|---|---|
| Error | 39.8 |
| Cost | 7048 |
| Alternative 8 | |
|---|---|
| Error | 48.6 |
| Cost | 6720 |
| Alternative 9 | |
|---|---|
| Error | 60.1 |
| Cost | 64 |

Initial program 20.3
Simplified20.3
Simplified20.3
Final simplification20.3
herbie shell --seed 2021044
(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.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)))))