\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{\frac{x + y}{\mathsf{hypot}\left(x, y\right)}}{\frac{\mathsf{hypot}\left(x, y\right)}{x - y}}\right)\right)\right)\right)double f(double x, double y) {
double r87535 = x;
double r87536 = y;
double r87537 = r87535 - r87536;
double r87538 = r87535 + r87536;
double r87539 = r87537 * r87538;
double r87540 = r87535 * r87535;
double r87541 = r87536 * r87536;
double r87542 = r87540 + r87541;
double r87543 = r87539 / r87542;
return r87543;
}
double f(double x, double y) {
double r87544 = x;
double r87545 = y;
double r87546 = r87544 + r87545;
double r87547 = hypot(r87544, r87545);
double r87548 = r87546 / r87547;
double r87549 = r87544 - r87545;
double r87550 = r87547 / r87549;
double r87551 = r87548 / r87550;
double r87552 = expm1(r87551);
double r87553 = log1p(r87552);
double r87554 = log1p(r87553);
double r87555 = expm1(r87554);
return r87555;
}




Bits error versus x




Bits error versus y
Results
| Original | 20.1 |
|---|---|
| Target | 0.0 |
| Herbie | 0.0 |
Initial program 20.1
Simplified20.1
rmApplied add-sqr-sqrt20.1
Applied times-frac20.2
Simplified20.2
Simplified0.0
rmApplied expm1-log1p-u0.0
Simplified0.2
rmApplied log1p-expm1-u0.2
Simplified0.0
Final simplification0.0
herbie shell --seed 2019174 +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))))