Average Error: 22.5 → 0.2
Time: 3.1s
Precision: 64
\[1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\]
\[\begin{array}{l} \mathbf{if}\;y \le -125106665.37977612 \lor \neg \left(y \le 83349377.7217288166\right):\\ \;\;\;\;1 \cdot \left(\frac{1}{y} - \frac{x}{y}\right) + x\\ \mathbf{else}:\\ \;\;\;\;1 - \frac{1 - x}{\sqrt[3]{y + 1} \cdot \sqrt[3]{y + 1}} \cdot \frac{y}{\sqrt[3]{y + 1}}\\ \end{array}\]
1 - \frac{\left(1 - x\right) \cdot y}{y + 1}
\begin{array}{l}
\mathbf{if}\;y \le -125106665.37977612 \lor \neg \left(y \le 83349377.7217288166\right):\\
\;\;\;\;1 \cdot \left(\frac{1}{y} - \frac{x}{y}\right) + x\\

\mathbf{else}:\\
\;\;\;\;1 - \frac{1 - x}{\sqrt[3]{y + 1} \cdot \sqrt[3]{y + 1}} \cdot \frac{y}{\sqrt[3]{y + 1}}\\

\end{array}
double f(double x, double y) {
        double r728787 = 1.0;
        double r728788 = x;
        double r728789 = r728787 - r728788;
        double r728790 = y;
        double r728791 = r728789 * r728790;
        double r728792 = r728790 + r728787;
        double r728793 = r728791 / r728792;
        double r728794 = r728787 - r728793;
        return r728794;
}

double f(double x, double y) {
        double r728795 = y;
        double r728796 = -125106665.37977612;
        bool r728797 = r728795 <= r728796;
        double r728798 = 83349377.72172882;
        bool r728799 = r728795 <= r728798;
        double r728800 = !r728799;
        bool r728801 = r728797 || r728800;
        double r728802 = 1.0;
        double r728803 = 1.0;
        double r728804 = r728803 / r728795;
        double r728805 = x;
        double r728806 = r728805 / r728795;
        double r728807 = r728804 - r728806;
        double r728808 = r728802 * r728807;
        double r728809 = r728808 + r728805;
        double r728810 = r728802 - r728805;
        double r728811 = r728795 + r728802;
        double r728812 = cbrt(r728811);
        double r728813 = r728812 * r728812;
        double r728814 = r728810 / r728813;
        double r728815 = r728795 / r728812;
        double r728816 = r728814 * r728815;
        double r728817 = r728802 - r728816;
        double r728818 = r728801 ? r728809 : r728817;
        return r728818;
}

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.84827882972468:\\ \;\;\;\;\frac{1}{y} - \left(\frac{x}{y} - x\right)\\ \mathbf{elif}\;y \lt 6799310503.41891003:\\ \;\;\;\;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 < -125106665.37977612 or 83349377.72172882 < y

    1. Initial program 45.9

      \[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 -125106665.37977612 < y < 83349377.72172882

    1. Initial program 0.1

      \[1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\]
    2. Using strategy rm
    3. Applied add-cube-cbrt0.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -125106665.37977612 \lor \neg \left(y \le 83349377.7217288166\right):\\ \;\;\;\;1 \cdot \left(\frac{1}{y} - \frac{x}{y}\right) + x\\ \mathbf{else}:\\ \;\;\;\;1 - \frac{1 - x}{\sqrt[3]{y + 1} \cdot \sqrt[3]{y + 1}} \cdot \frac{y}{\sqrt[3]{y + 1}}\\ \end{array}\]

Reproduce

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

  :herbie-target
  (if (< y -3693.8482788297247) (- (/ 1 y) (- (/ x y) x)) (if (< y 6799310503.41891) (- 1 (/ (* (- 1 x) y) (+ y 1))) (- (/ 1 y) (- (/ x y) x))))

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