Average Error: 22.5 → 0.2
Time: 4.5s
Precision: 64
\[1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\]
\[\begin{array}{l} \mathbf{if}\;y \le \frac{-6710697772236959}{67108864} \lor \neg \left(y \le \frac{5932035440293501}{33554432}\right):\\ \;\;\;\;1 \cdot \left(\frac{1}{y} - \frac{x}{y}\right) + x\\ \mathbf{else}:\\ \;\;\;\;1 - \left(1 - x\right) \cdot \left(y \cdot \frac{1}{y + 1}\right)\\ \end{array}\]
1 - \frac{\left(1 - x\right) \cdot y}{y + 1}
\begin{array}{l}
\mathbf{if}\;y \le \frac{-6710697772236959}{67108864} \lor \neg \left(y \le \frac{5932035440293501}{33554432}\right):\\
\;\;\;\;1 \cdot \left(\frac{1}{y} - \frac{x}{y}\right) + x\\

\mathbf{else}:\\
\;\;\;\;1 - \left(1 - x\right) \cdot \left(y \cdot \frac{1}{y + 1}\right)\\

\end{array}
double f(double x, double y) {
        double r576268 = 1.0;
        double r576269 = x;
        double r576270 = r576268 - r576269;
        double r576271 = y;
        double r576272 = r576270 * r576271;
        double r576273 = r576271 + r576268;
        double r576274 = r576272 / r576273;
        double r576275 = r576268 - r576274;
        return r576275;
}

double f(double x, double y) {
        double r576276 = y;
        double r576277 = -6710697772236959.0;
        double r576278 = 67108864.0;
        double r576279 = r576277 / r576278;
        bool r576280 = r576276 <= r576279;
        double r576281 = 5932035440293501.0;
        double r576282 = 33554432.0;
        double r576283 = r576281 / r576282;
        bool r576284 = r576276 <= r576283;
        double r576285 = !r576284;
        bool r576286 = r576280 || r576285;
        double r576287 = 1.0;
        double r576288 = 1.0;
        double r576289 = r576288 / r576276;
        double r576290 = x;
        double r576291 = r576290 / r576276;
        double r576292 = r576289 - r576291;
        double r576293 = r576287 * r576292;
        double r576294 = r576293 + r576290;
        double r576295 = r576287 - r576290;
        double r576296 = r576276 + r576287;
        double r576297 = r576288 / r576296;
        double r576298 = r576276 * r576297;
        double r576299 = r576295 * r576298;
        double r576300 = r576287 - r576299;
        double r576301 = r576286 ? r576294 : r576300;
        return r576301;
}

Error

Bits error versus x

Bits error versus y

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original22.5
Target0.2
Herbie0.2
\[\begin{array}{l} \mathbf{if}\;y \lt -3693.848278829724677052581682801246643066:\\ \;\;\;\;\frac{1}{y} - \left(\frac{x}{y} - x\right)\\ \mathbf{elif}\;y \lt 6799310503.41891002655029296875:\\ \;\;\;\;1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{y} - \left(\frac{x}{y} - x\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if y < -99997189.22729729 or 176788432.60686103 < y

    1. Initial program 46.1

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

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

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

    if -99997189.22729729 < y < 176788432.60686103

    1. Initial program 0.2

      \[1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity0.2

      \[\leadsto 1 - \frac{\left(1 - x\right) \cdot y}{\color{blue}{1 \cdot \left(y + 1\right)}}\]
    4. Applied times-frac0.2

      \[\leadsto 1 - \color{blue}{\frac{1 - x}{1} \cdot \frac{y}{y + 1}}\]
    5. Simplified0.2

      \[\leadsto 1 - \color{blue}{\left(1 - x\right)} \cdot \frac{y}{y + 1}\]
    6. Using strategy rm
    7. Applied div-inv0.2

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le \frac{-6710697772236959}{67108864} \lor \neg \left(y \le \frac{5932035440293501}{33554432}\right):\\ \;\;\;\;1 \cdot \left(\frac{1}{y} - \frac{x}{y}\right) + x\\ \mathbf{else}:\\ \;\;\;\;1 - \left(1 - x\right) \cdot \left(y \cdot \frac{1}{y + 1}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019304 
(FPCore (x y)
  :name "Diagrams.Trail:splitAtParam  from diagrams-lib-1.3.0.3, D"
  :precision binary64

  :herbie-target
  (if (< y -3693.84827882972468) (- (/ 1 y) (- (/ x y) x)) (if (< y 6799310503.41891003) (- 1 (/ (* (- 1 x) y) (+ y 1))) (- (/ 1 y) (- (/ x y) x))))

  (- 1 (/ (* (- 1 x) y) (+ y 1))))