\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\frac{\frac{y + x}{\mathsf{hypot}\left(x, y\right)}}{\frac{\mathsf{hypot}\left(x, y\right)}{x - y}}double f(double x, double y) {
double r5930056 = x;
double r5930057 = y;
double r5930058 = r5930056 - r5930057;
double r5930059 = r5930056 + r5930057;
double r5930060 = r5930058 * r5930059;
double r5930061 = r5930056 * r5930056;
double r5930062 = r5930057 * r5930057;
double r5930063 = r5930061 + r5930062;
double r5930064 = r5930060 / r5930063;
return r5930064;
}
double f(double x, double y) {
double r5930065 = y;
double r5930066 = x;
double r5930067 = r5930065 + r5930066;
double r5930068 = hypot(r5930066, r5930065);
double r5930069 = r5930067 / r5930068;
double r5930070 = r5930066 - r5930065;
double r5930071 = r5930068 / r5930070;
double r5930072 = r5930069 / r5930071;
return r5930072;
}




Bits error versus x




Bits error versus y
Results
| Original | 20.2 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
Initial program 20.2
Simplified20.2
rmApplied add-sqr-sqrt20.2
Applied times-frac20.3
rmApplied *-un-lft-identity20.3
Applied associate-*l*20.3
Simplified0.0
Final simplification0.0
herbie shell --seed 2019171 +o rules:numerics
(FPCore (x y)
:name "Kahan p9 Example"
:pre (and (< 0.0 x 1.0) (< y 1.0))
:herbie-target
(if (< 0.5 (fabs (/ x y)) 2.0) (/ (* (- x y) (+ x y)) (+ (* x x) (* y y))) (- 1.0 (/ 2.0 (+ 1.0 (* (/ x y) (/ x y))))))
(/ (* (- x y) (+ x y)) (+ (* x x) (* y y))))