1 - \log \left(1 - \frac{x - y}{1 - y}\right)\begin{array}{l}
\mathbf{if}\;y \le -92144215.75918830931186676025390625:\\
\;\;\;\;1 - \log \left(\mathsf{fma}\left(\frac{1}{y}, \frac{x}{y}, \frac{x}{y} - \frac{1}{y}\right)\right)\\
\mathbf{elif}\;y \le 30353201.4492965638637542724609375:\\
\;\;\;\;\left(1 - \log \left(\sqrt{1 - \frac{x - y}{1 - y}}\right)\right) - \log \left(\sqrt{\left(1 - \frac{\frac{\frac{x - y}{\sqrt[3]{1 - y}}}{\sqrt[3]{1 - y}}}{\sqrt[3]{1 - y}}\right) + \mathsf{fma}\left(\frac{x - y}{\sqrt[3]{1 - y}}, \frac{\frac{-1}{\sqrt[3]{1 - y}}}{\sqrt[3]{1 - y}}, \frac{\frac{\frac{x - y}{\sqrt[3]{1 - y}}}{\sqrt[3]{1 - y}}}{\sqrt[3]{1 - y}}\right)}\right)\\
\mathbf{else}:\\
\;\;\;\;1 - \log \left(\mathsf{fma}\left(\frac{1}{y}, \frac{x}{y}, \frac{x}{y} - \frac{1}{y}\right)\right)\\
\end{array}double f(double x, double y) {
double r13545487 = 1.0;
double r13545488 = x;
double r13545489 = y;
double r13545490 = r13545488 - r13545489;
double r13545491 = r13545487 - r13545489;
double r13545492 = r13545490 / r13545491;
double r13545493 = r13545487 - r13545492;
double r13545494 = log(r13545493);
double r13545495 = r13545487 - r13545494;
return r13545495;
}
double f(double x, double y) {
double r13545496 = y;
double r13545497 = -92144215.75918831;
bool r13545498 = r13545496 <= r13545497;
double r13545499 = 1.0;
double r13545500 = r13545499 / r13545496;
double r13545501 = x;
double r13545502 = r13545501 / r13545496;
double r13545503 = r13545502 - r13545500;
double r13545504 = fma(r13545500, r13545502, r13545503);
double r13545505 = log(r13545504);
double r13545506 = r13545499 - r13545505;
double r13545507 = 30353201.449296564;
bool r13545508 = r13545496 <= r13545507;
double r13545509 = r13545501 - r13545496;
double r13545510 = r13545499 - r13545496;
double r13545511 = r13545509 / r13545510;
double r13545512 = r13545499 - r13545511;
double r13545513 = sqrt(r13545512);
double r13545514 = log(r13545513);
double r13545515 = r13545499 - r13545514;
double r13545516 = cbrt(r13545510);
double r13545517 = r13545509 / r13545516;
double r13545518 = r13545517 / r13545516;
double r13545519 = r13545518 / r13545516;
double r13545520 = r13545499 - r13545519;
double r13545521 = -1.0;
double r13545522 = r13545521 / r13545516;
double r13545523 = r13545522 / r13545516;
double r13545524 = fma(r13545517, r13545523, r13545519);
double r13545525 = r13545520 + r13545524;
double r13545526 = sqrt(r13545525);
double r13545527 = log(r13545526);
double r13545528 = r13545515 - r13545527;
double r13545529 = r13545508 ? r13545528 : r13545506;
double r13545530 = r13545498 ? r13545506 : r13545529;
return r13545530;
}




Bits error versus x




Bits error versus y
| Original | 18.0 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
if y < -92144215.75918831 or 30353201.449296564 < y Initial program 46.3
Taylor expanded around inf 0.2
Simplified0.2
if -92144215.75918831 < y < 30353201.449296564Initial program 0.1
rmApplied add-sqr-sqrt0.1
Applied log-prod0.1
Applied associate--r+0.1
rmApplied add-cube-cbrt0.1
Applied *-un-lft-identity0.1
Applied times-frac0.1
Applied add-sqr-sqrt0.1
Applied prod-diff0.1
Simplified0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019172 +o rules:numerics
(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))))))