\frac{\left(x - y\right) \cdot \left(x + y\right)}{x \cdot x + y \cdot y}\begin{array}{l}
\mathbf{if}\;y \le -1.366208359764161784440446370856263249991 \cdot 10^{154}:\\
\;\;\;\;\frac{x - y}{y - x}\\
\mathbf{elif}\;y \le -7.512106064144896311879552836863591950545 \cdot 10^{-163}:\\
\;\;\;\;\sqrt[3]{\left(x + y\right) \cdot \frac{x - y}{x \cdot x + y \cdot y}} \cdot \left(\sqrt[3]{\left(x + y\right) \cdot \frac{x - y}{x \cdot x + y \cdot y}} \cdot \sqrt[3]{\left(x + y\right) \cdot \frac{x - y}{x \cdot x + y \cdot y}}\right)\\
\mathbf{elif}\;y \le -9.739334495050348959786376614389218616652 \cdot 10^{-187}:\\
\;\;\;\;\frac{x - y}{y - x}\\
\mathbf{elif}\;y \le 7.425329178057676654436511729281516473593 \cdot 10^{-165}:\\
\;\;\;\;1\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\frac{x \cdot x + y \cdot y}{x - y}}{x + y}}\\
\end{array}double f(double x, double y) {
double r191492 = x;
double r191493 = y;
double r191494 = r191492 - r191493;
double r191495 = r191492 + r191493;
double r191496 = r191494 * r191495;
double r191497 = r191492 * r191492;
double r191498 = r191493 * r191493;
double r191499 = r191497 + r191498;
double r191500 = r191496 / r191499;
return r191500;
}
double f(double x, double y) {
double r191501 = y;
double r191502 = -1.3662083597641618e+154;
bool r191503 = r191501 <= r191502;
double r191504 = x;
double r191505 = r191504 - r191501;
double r191506 = r191501 - r191504;
double r191507 = r191505 / r191506;
double r191508 = -7.512106064144896e-163;
bool r191509 = r191501 <= r191508;
double r191510 = r191504 + r191501;
double r191511 = r191504 * r191504;
double r191512 = r191501 * r191501;
double r191513 = r191511 + r191512;
double r191514 = r191505 / r191513;
double r191515 = r191510 * r191514;
double r191516 = cbrt(r191515);
double r191517 = r191516 * r191516;
double r191518 = r191516 * r191517;
double r191519 = -9.739334495050349e-187;
bool r191520 = r191501 <= r191519;
double r191521 = 7.425329178057677e-165;
bool r191522 = r191501 <= r191521;
double r191523 = 1.0;
double r191524 = r191513 / r191505;
double r191525 = r191524 / r191510;
double r191526 = r191523 / r191525;
double r191527 = r191522 ? r191523 : r191526;
double r191528 = r191520 ? r191507 : r191527;
double r191529 = r191509 ? r191518 : r191528;
double r191530 = r191503 ? r191507 : r191529;
return r191530;
}




Bits error versus x




Bits error versus y
Results
| Original | 19.7 |
|---|---|
| Target | 0.1 |
| Herbie | 5.2 |
if y < -1.3662083597641618e+154 or -7.512106064144896e-163 < y < -9.739334495050349e-187Initial program 59.7
Simplified58.0
Taylor expanded around 0 4.6
if -1.3662083597641618e+154 < y < -7.512106064144896e-163Initial program 0.1
Simplified0.4
rmApplied add-cube-cbrt0.3
Simplified0.3
Simplified0.3
if -9.739334495050349e-187 < y < 7.425329178057677e-165Initial program 28.7
Simplified29.6
Taylor expanded around inf 13.9
if 7.425329178057677e-165 < y Initial program 0.6
Simplified1.2
rmApplied clear-num1.2
Simplified1.2
Final simplification5.2
herbie shell --seed 2019179
(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))))