Average Error: 7.2 → 4.5
Time: 18.1s
Precision: 64
\[\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\]
\[\begin{array}{l} \mathbf{if}\;z \le -1.753638079409341804663632227985099096029 \cdot 10^{249}:\\ \;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\ \mathbf{elif}\;z \le 3.220793315188378710242772087918191049064 \cdot 10^{246}:\\ \;\;\;\;\frac{1}{x + 1} \cdot \left(\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right) - \frac{x}{t \cdot z - x}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{x + 1} \cdot \left(\mathsf{fma}\left(\frac{y}{z}, \frac{\frac{x}{t}}{t}, x + \frac{y}{t}\right) - \frac{x}{t \cdot z - x}\right)\\ \end{array}\]
\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}
\begin{array}{l}
\mathbf{if}\;z \le -1.753638079409341804663632227985099096029 \cdot 10^{249}:\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\

\mathbf{elif}\;z \le 3.220793315188378710242772087918191049064 \cdot 10^{246}:\\
\;\;\;\;\frac{1}{x + 1} \cdot \left(\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right) - \frac{x}{t \cdot z - x}\right)\\

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

\end{array}
double f(double x, double y, double z, double t) {
        double r30816517 = x;
        double r30816518 = y;
        double r30816519 = z;
        double r30816520 = r30816518 * r30816519;
        double r30816521 = r30816520 - r30816517;
        double r30816522 = t;
        double r30816523 = r30816522 * r30816519;
        double r30816524 = r30816523 - r30816517;
        double r30816525 = r30816521 / r30816524;
        double r30816526 = r30816517 + r30816525;
        double r30816527 = 1.0;
        double r30816528 = r30816517 + r30816527;
        double r30816529 = r30816526 / r30816528;
        return r30816529;
}

double f(double x, double y, double z, double t) {
        double r30816530 = z;
        double r30816531 = -1.7536380794093418e+249;
        bool r30816532 = r30816530 <= r30816531;
        double r30816533 = x;
        double r30816534 = y;
        double r30816535 = t;
        double r30816536 = r30816534 / r30816535;
        double r30816537 = r30816533 + r30816536;
        double r30816538 = 1.0;
        double r30816539 = r30816533 + r30816538;
        double r30816540 = r30816537 / r30816539;
        double r30816541 = 3.2207933151883787e+246;
        bool r30816542 = r30816530 <= r30816541;
        double r30816543 = 1.0;
        double r30816544 = r30816543 / r30816539;
        double r30816545 = r30816535 * r30816530;
        double r30816546 = r30816545 - r30816533;
        double r30816547 = r30816534 / r30816546;
        double r30816548 = fma(r30816547, r30816530, r30816533);
        double r30816549 = r30816533 / r30816546;
        double r30816550 = r30816548 - r30816549;
        double r30816551 = r30816544 * r30816550;
        double r30816552 = r30816534 / r30816530;
        double r30816553 = r30816533 / r30816535;
        double r30816554 = r30816553 / r30816535;
        double r30816555 = fma(r30816552, r30816554, r30816537);
        double r30816556 = r30816555 - r30816549;
        double r30816557 = r30816544 * r30816556;
        double r30816558 = r30816542 ? r30816551 : r30816557;
        double r30816559 = r30816532 ? r30816540 : r30816558;
        return r30816559;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original7.2
Target0.4
Herbie4.5
\[\frac{x + \left(\frac{y}{t - \frac{x}{z}} - \frac{x}{t \cdot z - x}\right)}{x + 1}\]

Derivation

  1. Split input into 3 regimes
  2. if z < -1.7536380794093418e+249

    1. Initial program 25.8

      \[\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\]
    2. Taylor expanded around inf 5.6

      \[\leadsto \frac{x + \color{blue}{\frac{y}{t}}}{x + 1}\]

    if -1.7536380794093418e+249 < z < 3.2207933151883787e+246

    1. Initial program 5.2

      \[\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\]
    2. Using strategy rm
    3. Applied div-sub5.2

      \[\leadsto \frac{x + \color{blue}{\left(\frac{y \cdot z}{t \cdot z - x} - \frac{x}{t \cdot z - x}\right)}}{x + 1}\]
    4. Applied associate-+r-5.2

      \[\leadsto \frac{\color{blue}{\left(x + \frac{y \cdot z}{t \cdot z - x}\right) - \frac{x}{t \cdot z - x}}}{x + 1}\]
    5. Simplified3.7

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right)} - \frac{x}{t \cdot z - x}}{x + 1}\]
    6. Using strategy rm
    7. Applied div-inv3.8

      \[\leadsto \color{blue}{\left(\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right) - \frac{x}{t \cdot z - x}\right) \cdot \frac{1}{x + 1}}\]

    if 3.2207933151883787e+246 < z

    1. Initial program 26.7

      \[\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\]
    2. Using strategy rm
    3. Applied div-sub26.7

      \[\leadsto \frac{x + \color{blue}{\left(\frac{y \cdot z}{t \cdot z - x} - \frac{x}{t \cdot z - x}\right)}}{x + 1}\]
    4. Applied associate-+r-26.7

      \[\leadsto \frac{\color{blue}{\left(x + \frac{y \cdot z}{t \cdot z - x}\right) - \frac{x}{t \cdot z - x}}}{x + 1}\]
    5. Simplified11.0

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right)} - \frac{x}{t \cdot z - x}}{x + 1}\]
    6. Using strategy rm
    7. Applied div-inv11.0

      \[\leadsto \color{blue}{\left(\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right) - \frac{x}{t \cdot z - x}\right) \cdot \frac{1}{x + 1}}\]
    8. Taylor expanded around inf 22.8

      \[\leadsto \left(\color{blue}{\left(x + \left(\frac{y}{t} + \frac{x \cdot y}{{t}^{2} \cdot z}\right)\right)} - \frac{x}{t \cdot z - x}\right) \cdot \frac{1}{x + 1}\]
    9. Simplified15.5

      \[\leadsto \left(\color{blue}{\mathsf{fma}\left(\frac{y}{z}, \frac{\frac{x}{t}}{t}, \frac{y}{t} + x\right)} - \frac{x}{t \cdot z - x}\right) \cdot \frac{1}{x + 1}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification4.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1.753638079409341804663632227985099096029 \cdot 10^{249}:\\ \;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\ \mathbf{elif}\;z \le 3.220793315188378710242772087918191049064 \cdot 10^{246}:\\ \;\;\;\;\frac{1}{x + 1} \cdot \left(\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right) - \frac{x}{t \cdot z - x}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{x + 1} \cdot \left(\mathsf{fma}\left(\frac{y}{z}, \frac{\frac{x}{t}}{t}, x + \frac{y}{t}\right) - \frac{x}{t \cdot z - x}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019192 +o rules:numerics
(FPCore (x y z t)
  :name "Diagrams.Trail:splitAtParam  from diagrams-lib-1.3.0.3, A"

  :herbie-target
  (/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1.0))

  (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)))