Average Error: 18.4 → 0.1
Time: 16.3s
Precision: 64
\[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}\]
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;
}

Error

Bits error versus x

Bits error versus y

Target

Original18.4
Target0.1
Herbie0.1
\[\begin{array}{l} \mathbf{if}\;y \lt -81284752.6194724142551422119140625:\\ \;\;\;\;1 - \log \left(\frac{x}{y \cdot y} - \left(\frac{1}{y} - \frac{x}{y}\right)\right)\\ \mathbf{elif}\;y \lt 30094271212461763678175232:\\ \;\;\;\;\log \left(\frac{e^{1}}{1 - \frac{x - y}{1 - y}}\right)\\ \mathbf{else}:\\ \;\;\;\;1 - \log \left(\frac{x}{y \cdot y} - \left(\frac{1}{y} - \frac{x}{y}\right)\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if y < -34737222.848607436 or 56360864.050822414 < y

    1. Initial program 46.2

      \[1 - \log \left(1 - \frac{x - y}{1 - y}\right)\]
    2. Taylor expanded around inf 0.1

      \[\leadsto 1 - \log \color{blue}{\left(\left(\frac{x}{y} + 1 \cdot \frac{x}{{y}^{2}}\right) - 1 \cdot \frac{1}{y}\right)}\]
    3. Simplified0.1

      \[\leadsto 1 - \log \color{blue}{\left(\mathsf{fma}\left(1, \frac{x}{{y}^{2}} - \frac{1}{y}, \frac{x}{y}\right)\right)}\]

    if -34737222.848607436 < y < 56360864.050822414

    1. Initial program 0.1

      \[1 - \log \left(1 - \frac{x - y}{1 - y}\right)\]
    2. Using strategy rm
    3. Applied flip3--0.1

      \[\leadsto 1 - \log \left(1 - \frac{x - y}{\color{blue}{\frac{{1}^{3} - {y}^{3}}{1 \cdot 1 + \left(y \cdot y + 1 \cdot y\right)}}}\right)\]
    4. Applied associate-/r/0.1

      \[\leadsto 1 - \log \left(1 - \color{blue}{\frac{x - y}{{1}^{3} - {y}^{3}} \cdot \left(1 \cdot 1 + \left(y \cdot y + 1 \cdot y\right)\right)}\right)\]
    5. Applied add-cube-cbrt0.1

      \[\leadsto 1 - \log \left(\color{blue}{\left(\sqrt[3]{1} \cdot \sqrt[3]{1}\right) \cdot \sqrt[3]{1}} - \frac{x - y}{{1}^{3} - {y}^{3}} \cdot \left(1 \cdot 1 + \left(y \cdot y + 1 \cdot y\right)\right)\right)\]
    6. Applied prod-diff0.1

      \[\leadsto 1 - \log \color{blue}{\left(\mathsf{fma}\left(\sqrt[3]{1} \cdot \sqrt[3]{1}, \sqrt[3]{1}, -\left(1 \cdot 1 + \left(y \cdot y + 1 \cdot y\right)\right) \cdot \frac{x - y}{{1}^{3} - {y}^{3}}\right) + \mathsf{fma}\left(-\left(1 \cdot 1 + \left(y \cdot y + 1 \cdot y\right)\right), \frac{x - y}{{1}^{3} - {y}^{3}}, \left(1 \cdot 1 + \left(y \cdot y + 1 \cdot y\right)\right) \cdot \frac{x - y}{{1}^{3} - {y}^{3}}\right)\right)}\]
    7. Simplified0.1

      \[\leadsto 1 - \log \left(\color{blue}{\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(-\left(1 \cdot 1 + \left(y \cdot y + 1 \cdot y\right)\right), \frac{x - y}{{1}^{3} - {y}^{3}}, \left(1 \cdot 1 + \left(y \cdot y + 1 \cdot y\right)\right) \cdot \frac{x - y}{{1}^{3} - {y}^{3}}\right)\right)\]
    8. Simplified0.1

      \[\leadsto 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) + \color{blue}{\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)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.1

    \[\leadsto \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}\]

Reproduce

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