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 r16490361 = 1.0;
double r16490362 = x;
double r16490363 = y;
double r16490364 = r16490362 - r16490363;
double r16490365 = r16490361 - r16490363;
double r16490366 = r16490364 / r16490365;
double r16490367 = r16490361 - r16490366;
double r16490368 = log(r16490367);
double r16490369 = r16490361 - r16490368;
return r16490369;
}
double f(double x, double y) {
double r16490370 = y;
double r16490371 = -156542919.49421751;
bool r16490372 = r16490370 <= r16490371;
double r16490373 = 1.0;
double r16490374 = x;
double r16490375 = r16490374 / r16490370;
double r16490376 = r16490373 / r16490370;
double r16490377 = r16490375 * r16490376;
double r16490378 = r16490377 - r16490376;
double r16490379 = r16490375 + r16490378;
double r16490380 = log(r16490379);
double r16490381 = r16490373 - r16490380;
double r16490382 = 41723711.509616;
bool r16490383 = r16490370 <= r16490382;
double r16490384 = r16490374 - r16490370;
double r16490385 = 1.0;
double r16490386 = r16490373 - r16490370;
double r16490387 = r16490385 / r16490386;
double r16490388 = r16490384 * r16490387;
double r16490389 = r16490373 - r16490388;
double r16490390 = log(r16490389);
double r16490391 = r16490373 - r16490390;
double r16490392 = r16490383 ? r16490391 : r16490381;
double r16490393 = r16490372 ? r16490381 : r16490392;
return r16490393;
}




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))))))