Average Error: 16.8 → 13.1
Time: 16.8s
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:\\ \;\;\;\;\frac{x + z \cdot \frac{y}{t}}{\left(1 + a\right) + b \cdot \frac{y}{t}}\\ \mathbf{elif}\;t \le 6.269129896688426694691879604931954191844 \cdot 10^{-59}:\\ \;\;\;\;\frac{x + \frac{z \cdot y}{t}}{\left(1 + a\right) + \frac{y \cdot b}{t}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + z \cdot \frac{y}{t}}{\left(1 + a\right) + b \cdot \frac{y}{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:\\
\;\;\;\;\frac{x + z \cdot \frac{y}{t}}{\left(1 + a\right) + b \cdot \frac{y}{t}}\\

\mathbf{elif}\;t \le 6.269129896688426694691879604931954191844 \cdot 10^{-59}:\\
\;\;\;\;\frac{x + \frac{z \cdot y}{t}}{\left(1 + a\right) + \frac{y \cdot b}{t}}\\

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

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r30620094 = x;
        double r30620095 = y;
        double r30620096 = z;
        double r30620097 = r30620095 * r30620096;
        double r30620098 = t;
        double r30620099 = r30620097 / r30620098;
        double r30620100 = r30620094 + r30620099;
        double r30620101 = a;
        double r30620102 = 1.0;
        double r30620103 = r30620101 + r30620102;
        double r30620104 = b;
        double r30620105 = r30620095 * r30620104;
        double r30620106 = r30620105 / r30620098;
        double r30620107 = r30620103 + r30620106;
        double r30620108 = r30620100 / r30620107;
        return r30620108;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r30620109 = t;
        double r30620110 = -2.3542876234484398e+38;
        bool r30620111 = r30620109 <= r30620110;
        double r30620112 = x;
        double r30620113 = z;
        double r30620114 = y;
        double r30620115 = r30620114 / r30620109;
        double r30620116 = r30620113 * r30620115;
        double r30620117 = r30620112 + r30620116;
        double r30620118 = 1.0;
        double r30620119 = a;
        double r30620120 = r30620118 + r30620119;
        double r30620121 = b;
        double r30620122 = r30620121 * r30620115;
        double r30620123 = r30620120 + r30620122;
        double r30620124 = r30620117 / r30620123;
        double r30620125 = 6.269129896688427e-59;
        bool r30620126 = r30620109 <= r30620125;
        double r30620127 = r30620113 * r30620114;
        double r30620128 = r30620127 / r30620109;
        double r30620129 = r30620112 + r30620128;
        double r30620130 = r30620114 * r30620121;
        double r30620131 = r30620130 / r30620109;
        double r30620132 = r30620120 + r30620131;
        double r30620133 = r30620129 / r30620132;
        double r30620134 = r30620126 ? r30620133 : r30620124;
        double r30620135 = r30620111 ? r30620124 : r30620134;
        return r30620135;
}

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:\\ \;\;\;\;\frac{x + z \cdot \frac{y}{t}}{\left(1 + a\right) + b \cdot \frac{y}{t}}\\ \mathbf{elif}\;t \le 6.269129896688426694691879604931954191844 \cdot 10^{-59}:\\ \;\;\;\;\frac{x + \frac{z \cdot y}{t}}{\left(1 + a\right) + \frac{y \cdot b}{t}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + z \cdot \frac{y}{t}}{\left(1 + a\right) + b \cdot \frac{y}{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))))