1 - \log \left(1 - \frac{x - y}{1 - y}\right)\begin{array}{l}
\mathbf{if}\;y \le -73256728.0171860307 \lor \neg \left(y \le 73789365.95162582\right):\\
\;\;\;\;1 - \log \left(1 \cdot \left(\left(\sqrt[3]{\frac{x}{{y}^{2}} - \frac{1}{y}} \cdot \sqrt[3]{\frac{x}{{y}^{2}} - \frac{1}{y}}\right) \cdot \sqrt[3]{\frac{x}{{y}^{2}} - \frac{1}{y}}\right) + \frac{x}{y}\right)\\
\mathbf{else}:\\
\;\;\;\;1 - \left(\log \left(\sqrt{1 - \left(\sqrt[3]{x - y} \cdot \sqrt[3]{x - y}\right) \cdot \frac{\sqrt[3]{x - y}}{1 - y}}\right) + \log \left(\sqrt{1 - \left(\sqrt[3]{x - y} \cdot \sqrt[3]{x - y}\right) \cdot \frac{\sqrt[3]{x - y}}{1 - y}}\right)\right)\\
\end{array}double f(double x, double y) {
double r334596 = 1.0;
double r334597 = x;
double r334598 = y;
double r334599 = r334597 - r334598;
double r334600 = r334596 - r334598;
double r334601 = r334599 / r334600;
double r334602 = r334596 - r334601;
double r334603 = log(r334602);
double r334604 = r334596 - r334603;
return r334604;
}
double f(double x, double y) {
double r334605 = y;
double r334606 = -73256728.01718603;
bool r334607 = r334605 <= r334606;
double r334608 = 73789365.95162582;
bool r334609 = r334605 <= r334608;
double r334610 = !r334609;
bool r334611 = r334607 || r334610;
double r334612 = 1.0;
double r334613 = x;
double r334614 = 2.0;
double r334615 = pow(r334605, r334614);
double r334616 = r334613 / r334615;
double r334617 = 1.0;
double r334618 = r334617 / r334605;
double r334619 = r334616 - r334618;
double r334620 = cbrt(r334619);
double r334621 = r334620 * r334620;
double r334622 = r334621 * r334620;
double r334623 = r334612 * r334622;
double r334624 = r334613 / r334605;
double r334625 = r334623 + r334624;
double r334626 = log(r334625);
double r334627 = r334612 - r334626;
double r334628 = r334613 - r334605;
double r334629 = cbrt(r334628);
double r334630 = r334629 * r334629;
double r334631 = r334612 - r334605;
double r334632 = r334629 / r334631;
double r334633 = r334630 * r334632;
double r334634 = r334612 - r334633;
double r334635 = sqrt(r334634);
double r334636 = log(r334635);
double r334637 = r334636 + r334636;
double r334638 = r334612 - r334637;
double r334639 = r334611 ? r334627 : r334638;
return r334639;
}




Bits error versus x




Bits error versus y
Results
| Original | 18.4 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
if y < -73256728.01718603 or 73789365.95162582 < y Initial program 46.8
Taylor expanded around inf 0.2
Simplified0.2
rmApplied add-cube-cbrt0.2
if -73256728.01718603 < y < 73789365.95162582Initial program 0.1
rmApplied *-un-lft-identity0.1
Applied add-cube-cbrt0.1
Applied times-frac0.1
Simplified0.1
rmApplied add-sqr-sqrt0.1
Applied log-prod0.1
Final simplification0.1
herbie shell --seed 2020056
(FPCore (x y)
:name "Numeric.SpecFunctions:invIncompleteGamma from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(if (< y -81284752.61947241) (- 1 (log (- (/ x (* y y)) (- (/ 1 y) (/ x y))))) (if (< y 3.0094271212461764e+25) (log (/ (exp 1) (- 1 (/ (- x y) (- 1 y))))) (- 1 (log (- (/ x (* y y)) (- (/ 1 y) (/ x y)))))))
(- 1 (log (- 1 (/ (- x y) (- 1 y))))))