Average Error: 22.8 → 7.6
Time: 4.8s
Precision: 64
\[1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\]
\[\begin{array}{l} \mathbf{if}\;y \le -1433265.00379428291 \lor \neg \left(y \le 2.739133723068897 \cdot 10^{23}\right):\\ \;\;\;\;\mathsf{fma}\left(1, \frac{x}{{y}^{2}} - \frac{x}{y}, x\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{y}{{y}^{3} + {1}^{3}} \cdot \left(y \cdot y + \left(1 \cdot 1 - y \cdot 1\right)\right), x - 1, 1\right)\\ \end{array}\]
1 - \frac{\left(1 - x\right) \cdot y}{y + 1}
\begin{array}{l}
\mathbf{if}\;y \le -1433265.00379428291 \lor \neg \left(y \le 2.739133723068897 \cdot 10^{23}\right):\\
\;\;\;\;\mathsf{fma}\left(1, \frac{x}{{y}^{2}} - \frac{x}{y}, x\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{{y}^{3} + {1}^{3}} \cdot \left(y \cdot y + \left(1 \cdot 1 - y \cdot 1\right)\right), x - 1, 1\right)\\

\end{array}
double f(double x, double y) {
        double r972200 = 1.0;
        double r972201 = x;
        double r972202 = r972200 - r972201;
        double r972203 = y;
        double r972204 = r972202 * r972203;
        double r972205 = r972203 + r972200;
        double r972206 = r972204 / r972205;
        double r972207 = r972200 - r972206;
        return r972207;
}

double f(double x, double y) {
        double r972208 = y;
        double r972209 = -1433265.003794283;
        bool r972210 = r972208 <= r972209;
        double r972211 = 2.739133723068897e+23;
        bool r972212 = r972208 <= r972211;
        double r972213 = !r972212;
        bool r972214 = r972210 || r972213;
        double r972215 = 1.0;
        double r972216 = x;
        double r972217 = 2.0;
        double r972218 = pow(r972208, r972217);
        double r972219 = r972216 / r972218;
        double r972220 = r972216 / r972208;
        double r972221 = r972219 - r972220;
        double r972222 = fma(r972215, r972221, r972216);
        double r972223 = 3.0;
        double r972224 = pow(r972208, r972223);
        double r972225 = pow(r972215, r972223);
        double r972226 = r972224 + r972225;
        double r972227 = r972208 / r972226;
        double r972228 = r972208 * r972208;
        double r972229 = r972215 * r972215;
        double r972230 = r972208 * r972215;
        double r972231 = r972229 - r972230;
        double r972232 = r972228 + r972231;
        double r972233 = r972227 * r972232;
        double r972234 = r972216 - r972215;
        double r972235 = fma(r972233, r972234, r972215);
        double r972236 = r972214 ? r972222 : r972235;
        return r972236;
}

Error

Bits error versus x

Bits error versus y

Target

Original22.8
Target0.3
Herbie7.6
\[\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 < -1433265.003794283 or 2.739133723068897e+23 < y

    1. Initial program 46.2

      \[1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\]
    2. Simplified29.6

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{y}{y + 1}, x - 1, 1\right)}\]
    3. Using strategy rm
    4. Applied add-cube-cbrt30.4

      \[\leadsto \mathsf{fma}\left(\frac{y}{\color{blue}{\left(\sqrt[3]{y + 1} \cdot \sqrt[3]{y + 1}\right) \cdot \sqrt[3]{y + 1}}}, x - 1, 1\right)\]
    5. Applied associate-/r*30.4

      \[\leadsto \mathsf{fma}\left(\color{blue}{\frac{\frac{y}{\sqrt[3]{y + 1} \cdot \sqrt[3]{y + 1}}}{\sqrt[3]{y + 1}}}, x - 1, 1\right)\]
    6. Taylor expanded around inf 14.8

      \[\leadsto \color{blue}{\left(x + 1 \cdot \frac{x}{{y}^{2}}\right) - 1 \cdot \frac{x}{y}}\]
    7. Simplified14.8

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

    if -1433265.003794283 < y < 2.739133723068897e+23

    1. Initial program 0.9

      \[1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\]
    2. Simplified0.8

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{y}{y + 1}, x - 1, 1\right)}\]
    3. Using strategy rm
    4. Applied flip3-+0.8

      \[\leadsto \mathsf{fma}\left(\frac{y}{\color{blue}{\frac{{y}^{3} + {1}^{3}}{y \cdot y + \left(1 \cdot 1 - y \cdot 1\right)}}}, x - 1, 1\right)\]
    5. Applied associate-/r/0.8

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -1433265.00379428291 \lor \neg \left(y \le 2.739133723068897 \cdot 10^{23}\right):\\ \;\;\;\;\mathsf{fma}\left(1, \frac{x}{{y}^{2}} - \frac{x}{y}, x\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{y}{{y}^{3} + {1}^{3}} \cdot \left(y \cdot y + \left(1 \cdot 1 - y \cdot 1\right)\right), x - 1, 1\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020034 +o rules:numerics
(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))))