Average Error: 7.0 → 2.6
Time: 15.0s
Precision: 64
\[\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le 2.20761997366181834 \cdot 10^{-298} \lor \neg \left(x \le 3.55619618466358326 \cdot 10^{-252}\right):\\ \;\;\;\;\frac{\mathsf{fma}\left(y, z \cdot \frac{1}{t \cdot z - x}, x\right)}{x + 1} - \frac{\frac{x}{t \cdot z - x}}{x + 1}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\ \end{array}\]
\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}
\begin{array}{l}
\mathbf{if}\;x \le 2.20761997366181834 \cdot 10^{-298} \lor \neg \left(x \le 3.55619618466358326 \cdot 10^{-252}\right):\\
\;\;\;\;\frac{\mathsf{fma}\left(y, z \cdot \frac{1}{t \cdot z - x}, x\right)}{x + 1} - \frac{\frac{x}{t \cdot z - x}}{x + 1}\\

\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\

\end{array}
double f(double x, double y, double z, double t) {
        double r610706 = x;
        double r610707 = y;
        double r610708 = z;
        double r610709 = r610707 * r610708;
        double r610710 = r610709 - r610706;
        double r610711 = t;
        double r610712 = r610711 * r610708;
        double r610713 = r610712 - r610706;
        double r610714 = r610710 / r610713;
        double r610715 = r610706 + r610714;
        double r610716 = 1.0;
        double r610717 = r610706 + r610716;
        double r610718 = r610715 / r610717;
        return r610718;
}

double f(double x, double y, double z, double t) {
        double r610719 = x;
        double r610720 = 2.2076199736618183e-298;
        bool r610721 = r610719 <= r610720;
        double r610722 = 3.5561961846635833e-252;
        bool r610723 = r610719 <= r610722;
        double r610724 = !r610723;
        bool r610725 = r610721 || r610724;
        double r610726 = y;
        double r610727 = z;
        double r610728 = 1.0;
        double r610729 = t;
        double r610730 = r610729 * r610727;
        double r610731 = r610730 - r610719;
        double r610732 = r610728 / r610731;
        double r610733 = r610727 * r610732;
        double r610734 = fma(r610726, r610733, r610719);
        double r610735 = 1.0;
        double r610736 = r610719 + r610735;
        double r610737 = r610734 / r610736;
        double r610738 = r610719 / r610731;
        double r610739 = r610738 / r610736;
        double r610740 = r610737 - r610739;
        double r610741 = r610726 / r610729;
        double r610742 = r610719 + r610741;
        double r610743 = r610742 / r610736;
        double r610744 = r610725 ? r610740 : r610743;
        return r610744;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original7.0
Target0.4
Herbie2.6
\[\frac{x + \left(\frac{y}{t - \frac{x}{z}} - \frac{x}{t \cdot z - x}\right)}{x + 1}\]

Derivation

  1. Split input into 2 regimes
  2. if x < 2.2076199736618183e-298 or 3.5561961846635833e-252 < x

    1. Initial program 6.9

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

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

      \[\leadsto \frac{x + \left(\color{blue}{y \cdot \frac{z}{t \cdot z - x}} - \frac{x}{t \cdot z - x}\right)}{x + 1}\]
    5. Using strategy rm
    6. Applied associate-+r-2.1

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

      \[\leadsto \color{blue}{\frac{x + y \cdot \frac{z}{t \cdot z - x}}{x + 1} - \frac{\frac{x}{t \cdot z - x}}{x + 1}}\]
    8. Simplified2.1

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

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

    if 2.2076199736618183e-298 < x < 3.5561961846635833e-252

    1. Initial program 10.5

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

      \[\leadsto \frac{x + \color{blue}{\frac{y}{t}}}{x + 1}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification2.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 2.20761997366181834 \cdot 10^{-298} \lor \neg \left(x \le 3.55619618466358326 \cdot 10^{-252}\right):\\ \;\;\;\;\frac{\mathsf{fma}\left(y, z \cdot \frac{1}{t \cdot z - x}, x\right)}{x + 1} - \frac{\frac{x}{t \cdot z - x}}{x + 1}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\ \end{array}\]

Reproduce

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

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

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