Average Error: 18.3 → 0.1
Time: 4.3s
Precision: 64
\[1 - \log \left(1 - \frac{x - y}{1 - y}\right)\]
\[\begin{array}{l} \mathbf{if}\;y \le -199754789.0343833863735198974609375 \lor \neg \left(y \le 32910417.669902421534061431884765625\right):\\ \;\;\;\;\log \left(\frac{e^{1}}{1 \cdot \left(\frac{x}{{y}^{2}} - \frac{1}{y}\right) + \frac{x}{y}}\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(\frac{e^{1}}{1 - \frac{x - y}{1 - y}}\right)\\ \end{array}\]
1 - \log \left(1 - \frac{x - y}{1 - y}\right)
\begin{array}{l}
\mathbf{if}\;y \le -199754789.0343833863735198974609375 \lor \neg \left(y \le 32910417.669902421534061431884765625\right):\\
\;\;\;\;\log \left(\frac{e^{1}}{1 \cdot \left(\frac{x}{{y}^{2}} - \frac{1}{y}\right) + \frac{x}{y}}\right)\\

\mathbf{else}:\\
\;\;\;\;\log \left(\frac{e^{1}}{1 - \frac{x - y}{1 - y}}\right)\\

\end{array}
double f(double x, double y) {
        double r432344 = 1.0;
        double r432345 = x;
        double r432346 = y;
        double r432347 = r432345 - r432346;
        double r432348 = r432344 - r432346;
        double r432349 = r432347 / r432348;
        double r432350 = r432344 - r432349;
        double r432351 = log(r432350);
        double r432352 = r432344 - r432351;
        return r432352;
}

double f(double x, double y) {
        double r432353 = y;
        double r432354 = -199754789.0343834;
        bool r432355 = r432353 <= r432354;
        double r432356 = 32910417.66990242;
        bool r432357 = r432353 <= r432356;
        double r432358 = !r432357;
        bool r432359 = r432355 || r432358;
        double r432360 = 1.0;
        double r432361 = exp(r432360);
        double r432362 = x;
        double r432363 = 2.0;
        double r432364 = pow(r432353, r432363);
        double r432365 = r432362 / r432364;
        double r432366 = 1.0;
        double r432367 = r432366 / r432353;
        double r432368 = r432365 - r432367;
        double r432369 = r432360 * r432368;
        double r432370 = r432362 / r432353;
        double r432371 = r432369 + r432370;
        double r432372 = r432361 / r432371;
        double r432373 = log(r432372);
        double r432374 = r432362 - r432353;
        double r432375 = r432360 - r432353;
        double r432376 = r432374 / r432375;
        double r432377 = r432360 - r432376;
        double r432378 = r432361 / r432377;
        double r432379 = log(r432378);
        double r432380 = r432359 ? r432373 : r432379;
        return r432380;
}

Error

Bits error versus x

Bits error versus y

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original18.3
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 < -199754789.0343834 or 32910417.66990242 < y

    1. Initial program 46.8

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

      \[\leadsto \color{blue}{\log \left(e^{1}\right)} - \log \left(1 - \frac{x - y}{1 - y}\right)\]
    4. Applied diff-log46.8

      \[\leadsto \color{blue}{\log \left(\frac{e^{1}}{1 - \frac{x - y}{1 - y}}\right)}\]
    5. Taylor expanded around inf 0.1

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

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

    if -199754789.0343834 < y < 32910417.66990242

    1. Initial program 0.1

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

      \[\leadsto \color{blue}{\log \left(e^{1}\right)} - \log \left(1 - \frac{x - y}{1 - y}\right)\]
    4. Applied diff-log0.1

      \[\leadsto \color{blue}{\log \left(\frac{e^{1}}{1 - \frac{x - y}{1 - y}}\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -199754789.0343833863735198974609375 \lor \neg \left(y \le 32910417.669902421534061431884765625\right):\\ \;\;\;\;\log \left(\frac{e^{1}}{1 \cdot \left(\frac{x}{{y}^{2}} - \frac{1}{y}\right) + \frac{x}{y}}\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(\frac{e^{1}}{1 - \frac{x - y}{1 - y}}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019353 
(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))))))