1.0 - \log \left(1.0 - \frac{x - y}{1.0 - y}\right)\begin{array}{l}
\mathbf{if}\;y \le -156542919.49421751:\\
\;\;\;\;1.0 - \log \left(\frac{x}{y} + \left(\frac{x}{y} \cdot \frac{1.0}{y} - \frac{1.0}{y}\right)\right)\\
\mathbf{elif}\;y \le 41723711.509616:\\
\;\;\;\;1.0 - \log \left(1.0 - \left(x - y\right) \cdot \frac{1}{1.0 - y}\right)\\
\mathbf{else}:\\
\;\;\;\;1.0 - \log \left(\frac{x}{y} + \left(\frac{x}{y} \cdot \frac{1.0}{y} - \frac{1.0}{y}\right)\right)\\
\end{array}double f(double x, double y) {
double r19977508 = 1.0;
double r19977509 = x;
double r19977510 = y;
double r19977511 = r19977509 - r19977510;
double r19977512 = r19977508 - r19977510;
double r19977513 = r19977511 / r19977512;
double r19977514 = r19977508 - r19977513;
double r19977515 = log(r19977514);
double r19977516 = r19977508 - r19977515;
return r19977516;
}
double f(double x, double y) {
double r19977517 = y;
double r19977518 = -156542919.49421751;
bool r19977519 = r19977517 <= r19977518;
double r19977520 = 1.0;
double r19977521 = x;
double r19977522 = r19977521 / r19977517;
double r19977523 = r19977520 / r19977517;
double r19977524 = r19977522 * r19977523;
double r19977525 = r19977524 - r19977523;
double r19977526 = r19977522 + r19977525;
double r19977527 = log(r19977526);
double r19977528 = r19977520 - r19977527;
double r19977529 = 41723711.509616;
bool r19977530 = r19977517 <= r19977529;
double r19977531 = r19977521 - r19977517;
double r19977532 = 1.0;
double r19977533 = r19977520 - r19977517;
double r19977534 = r19977532 / r19977533;
double r19977535 = r19977531 * r19977534;
double r19977536 = r19977520 - r19977535;
double r19977537 = log(r19977536);
double r19977538 = r19977520 - r19977537;
double r19977539 = r19977530 ? r19977538 : r19977528;
double r19977540 = r19977519 ? r19977528 : r19977539;
return r19977540;
}




Bits error versus x




Bits error versus y
Results
| Original | 17.6 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
if y < -156542919.49421751 or 41723711.509616 < y Initial program 45.2
Taylor expanded around inf 0.1
Simplified0.1
if -156542919.49421751 < y < 41723711.509616Initial program 0.1
rmApplied div-inv0.1
Final simplification0.1
herbie shell --seed 2019162
(FPCore (x y)
:name "Numeric.SpecFunctions:invIncompleteGamma from math-functions-0.1.5.2, B"
:herbie-target
(if (< y -81284752.61947241) (- 1.0 (log (- (/ x (* y y)) (- (/ 1.0 y) (/ x y))))) (if (< y 3.0094271212461764e+25) (log (/ (exp 1.0) (- 1.0 (/ (- x y) (- 1.0 y))))) (- 1.0 (log (- (/ x (* y y)) (- (/ 1.0 y) (/ x y)))))))
(- 1.0 (log (- 1.0 (/ (- x y) (- 1.0 y))))))