1 - \log \left(1 - \frac{x - y}{1 - y}\right)\begin{array}{l}
\mathbf{if}\;y \le -34737222.84860743582248687744140625 \lor \neg \left(y \le 56360864.050822414457798004150390625\right):\\
\;\;\;\;1 - \log \left(\mathsf{fma}\left(1, \frac{x}{{y}^{2}} - \frac{1}{y}, \frac{x}{y}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;1 - \log \left(\left(\left(\sqrt[3]{1} \cdot \sqrt[3]{1}\right) \cdot \sqrt[3]{1} - \frac{\mathsf{fma}\left(1, 1, \mathsf{fma}\left(y, y, 1 \cdot y\right)\right) \cdot \left(x - y\right)}{{1}^{3} - {y}^{3}}\right) + \mathsf{fma}\left(1, 1, \mathsf{fma}\left(y, y, 1 \cdot y\right)\right) \cdot \left(\left(-\frac{x - y}{{1}^{3} - {y}^{3}}\right) + \frac{x - y}{{1}^{3} - {y}^{3}}\right)\right)\\
\end{array}double f(double x, double y) {
double r403275 = 1.0;
double r403276 = x;
double r403277 = y;
double r403278 = r403276 - r403277;
double r403279 = r403275 - r403277;
double r403280 = r403278 / r403279;
double r403281 = r403275 - r403280;
double r403282 = log(r403281);
double r403283 = r403275 - r403282;
return r403283;
}
double f(double x, double y) {
double r403284 = y;
double r403285 = -34737222.848607436;
bool r403286 = r403284 <= r403285;
double r403287 = 56360864.050822414;
bool r403288 = r403284 <= r403287;
double r403289 = !r403288;
bool r403290 = r403286 || r403289;
double r403291 = 1.0;
double r403292 = x;
double r403293 = 2.0;
double r403294 = pow(r403284, r403293);
double r403295 = r403292 / r403294;
double r403296 = 1.0;
double r403297 = r403296 / r403284;
double r403298 = r403295 - r403297;
double r403299 = r403292 / r403284;
double r403300 = fma(r403291, r403298, r403299);
double r403301 = log(r403300);
double r403302 = r403291 - r403301;
double r403303 = cbrt(r403291);
double r403304 = r403303 * r403303;
double r403305 = r403304 * r403303;
double r403306 = r403291 * r403284;
double r403307 = fma(r403284, r403284, r403306);
double r403308 = fma(r403291, r403291, r403307);
double r403309 = r403292 - r403284;
double r403310 = r403308 * r403309;
double r403311 = 3.0;
double r403312 = pow(r403291, r403311);
double r403313 = pow(r403284, r403311);
double r403314 = r403312 - r403313;
double r403315 = r403310 / r403314;
double r403316 = r403305 - r403315;
double r403317 = r403309 / r403314;
double r403318 = -r403317;
double r403319 = r403318 + r403317;
double r403320 = r403308 * r403319;
double r403321 = r403316 + r403320;
double r403322 = log(r403321);
double r403323 = r403291 - r403322;
double r403324 = r403290 ? r403302 : r403323;
return r403324;
}




Bits error versus x




Bits error versus y
| Original | 18.4 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
if y < -34737222.848607436 or 56360864.050822414 < y Initial program 46.2
Taylor expanded around inf 0.1
Simplified0.1
if -34737222.848607436 < y < 56360864.050822414Initial program 0.1
rmApplied flip3--0.1
Applied associate-/r/0.1
Applied add-cube-cbrt0.1
Applied prod-diff0.1
Simplified0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019354 +o rules:numerics
(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))))))