Average Error: 18.1 → 0.1
Time: 16.1s
Precision: 64
\[1 - \log \left(1 - \frac{x - y}{1 - y}\right)\]
\[\begin{array}{l} \mathbf{if}\;y \le -212491914.1913111507892608642578125 \lor \neg \left(y \le 54137734.38243345916271209716796875\right):\\ \;\;\;\;\log \left(\frac{e^{1}}{\left(1 + \frac{1}{y}\right) \cdot \frac{x}{y} - \frac{1}{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 -212491914.1913111507892608642578125 \lor \neg \left(y \le 54137734.38243345916271209716796875\right):\\
\;\;\;\;\log \left(\frac{e^{1}}{\left(1 + \frac{1}{y}\right) \cdot \frac{x}{y} - \frac{1}{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 r244166 = 1.0;
        double r244167 = x;
        double r244168 = y;
        double r244169 = r244167 - r244168;
        double r244170 = r244166 - r244168;
        double r244171 = r244169 / r244170;
        double r244172 = r244166 - r244171;
        double r244173 = log(r244172);
        double r244174 = r244166 - r244173;
        return r244174;
}

double f(double x, double y) {
        double r244175 = y;
        double r244176 = -212491914.19131115;
        bool r244177 = r244175 <= r244176;
        double r244178 = 54137734.38243346;
        bool r244179 = r244175 <= r244178;
        double r244180 = !r244179;
        bool r244181 = r244177 || r244180;
        double r244182 = 1.0;
        double r244183 = exp(r244182);
        double r244184 = 1.0;
        double r244185 = r244182 / r244175;
        double r244186 = r244184 + r244185;
        double r244187 = x;
        double r244188 = r244187 / r244175;
        double r244189 = r244186 * r244188;
        double r244190 = r244189 - r244185;
        double r244191 = r244183 / r244190;
        double r244192 = log(r244191);
        double r244193 = r244187 - r244175;
        double r244194 = r244182 - r244175;
        double r244195 = r244193 / r244194;
        double r244196 = r244182 - r244195;
        double r244197 = r244183 / r244196;
        double r244198 = log(r244197);
        double r244199 = r244181 ? r244192 : r244198;
        return r244199;
}

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.1
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 < -212491914.19131115 or 54137734.38243346 < y

    1. Initial program 46.7

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

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

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

      \[\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.2

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

    if -212491914.19131115 < y < 54137734.38243346

    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 -212491914.1913111507892608642578125 \lor \neg \left(y \le 54137734.38243345916271209716796875\right):\\ \;\;\;\;\log \left(\frac{e^{1}}{\left(1 + \frac{1}{y}\right) \cdot \frac{x}{y} - \frac{1}{y}}\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(\frac{e^{1}}{1 - \frac{x - y}{1 - y}}\right)\\ \end{array}\]

Reproduce

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