Average Error: 16.8 → 13.1
Time: 13.4s
Precision: 64
\[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\]
\[\begin{array}{l} \mathbf{if}\;t \le -235428762344843979143671561841079746560 \lor \neg \left(t \le 6.269129896688426694691879604931954191844 \cdot 10^{-59}\right):\\ \;\;\;\;\frac{x + z \cdot \frac{y}{t}}{\left(1 + a\right) + b \cdot \frac{y}{t}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{z \cdot y}{t}}{\left(1 + a\right) + \frac{y \cdot b}{t}}\\ \end{array}\]
\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}
\begin{array}{l}
\mathbf{if}\;t \le -235428762344843979143671561841079746560 \lor \neg \left(t \le 6.269129896688426694691879604931954191844 \cdot 10^{-59}\right):\\
\;\;\;\;\frac{x + z \cdot \frac{y}{t}}{\left(1 + a\right) + b \cdot \frac{y}{t}}\\

\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{z \cdot y}{t}}{\left(1 + a\right) + \frac{y \cdot b}{t}}\\

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r511824 = x;
        double r511825 = y;
        double r511826 = z;
        double r511827 = r511825 * r511826;
        double r511828 = t;
        double r511829 = r511827 / r511828;
        double r511830 = r511824 + r511829;
        double r511831 = a;
        double r511832 = 1.0;
        double r511833 = r511831 + r511832;
        double r511834 = b;
        double r511835 = r511825 * r511834;
        double r511836 = r511835 / r511828;
        double r511837 = r511833 + r511836;
        double r511838 = r511830 / r511837;
        return r511838;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r511839 = t;
        double r511840 = -2.3542876234484398e+38;
        bool r511841 = r511839 <= r511840;
        double r511842 = 6.269129896688427e-59;
        bool r511843 = r511839 <= r511842;
        double r511844 = !r511843;
        bool r511845 = r511841 || r511844;
        double r511846 = x;
        double r511847 = z;
        double r511848 = y;
        double r511849 = r511848 / r511839;
        double r511850 = r511847 * r511849;
        double r511851 = r511846 + r511850;
        double r511852 = 1.0;
        double r511853 = a;
        double r511854 = r511852 + r511853;
        double r511855 = b;
        double r511856 = r511855 * r511849;
        double r511857 = r511854 + r511856;
        double r511858 = r511851 / r511857;
        double r511859 = r511847 * r511848;
        double r511860 = r511859 / r511839;
        double r511861 = r511846 + r511860;
        double r511862 = r511848 * r511855;
        double r511863 = r511862 / r511839;
        double r511864 = r511854 + r511863;
        double r511865 = r511861 / r511864;
        double r511866 = r511845 ? r511858 : r511865;
        return r511866;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Bits error versus b

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original16.8
Target13.2
Herbie13.1
\[\begin{array}{l} \mathbf{if}\;t \lt -1.365908536631008841640163147697088508132 \cdot 10^{-271}:\\ \;\;\;\;1 \cdot \left(\left(x + \frac{y}{t} \cdot z\right) \cdot \frac{1}{\left(a + 1\right) + \frac{y}{t} \cdot b}\right)\\ \mathbf{elif}\;t \lt 3.036967103737245906066829435890093573122 \cdot 10^{-130}:\\ \;\;\;\;\frac{z}{b}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\left(x + \frac{y}{t} \cdot z\right) \cdot \frac{1}{\left(a + 1\right) + \frac{y}{t} \cdot b}\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if t < -2.3542876234484398e+38 or 6.269129896688427e-59 < t

    1. Initial program 11.6

      \[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\]
    2. Simplified4.5

      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(y, \frac{b}{t}, a + 1\right)}}\]
    3. Using strategy rm
    4. Applied fma-udef4.5

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

      \[\leadsto \frac{\color{blue}{\left(z \cdot \frac{1}{t}\right)} \cdot y + x}{\mathsf{fma}\left(y, \frac{b}{t}, a + 1\right)}\]
    7. Applied associate-*l*4.6

      \[\leadsto \frac{\color{blue}{z \cdot \left(\frac{1}{t} \cdot y\right)} + x}{\mathsf{fma}\left(y, \frac{b}{t}, a + 1\right)}\]
    8. Simplified4.6

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

      \[\leadsto \frac{z \cdot \frac{y}{t} + x}{\color{blue}{y \cdot \frac{b}{t} + \left(a + 1\right)}}\]
    11. Simplified4.5

      \[\leadsto \frac{z \cdot \frac{y}{t} + x}{\color{blue}{\frac{y}{t} \cdot b} + \left(a + 1\right)}\]

    if -2.3542876234484398e+38 < t < 6.269129896688427e-59

    1. Initial program 22.8

      \[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification13.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;t \le -235428762344843979143671561841079746560 \lor \neg \left(t \le 6.269129896688426694691879604931954191844 \cdot 10^{-59}\right):\\ \;\;\;\;\frac{x + z \cdot \frac{y}{t}}{\left(1 + a\right) + b \cdot \frac{y}{t}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{z \cdot y}{t}}{\left(1 + a\right) + \frac{y \cdot b}{t}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019174 +o rules:numerics
(FPCore (x y z t a b)
  :name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B"

  :herbie-target
  (if (< t -1.3659085366310088e-271) (* 1.0 (* (+ x (* (/ y t) z)) (/ 1.0 (+ (+ a 1.0) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1.0 (* (+ x (* (/ y t) z)) (/ 1.0 (+ (+ a 1.0) (* (/ y t) b)))))))

  (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))))