\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;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 16.8 |
|---|---|
| Target | 13.2 |
| Herbie | 13.1 |
if t < -2.3542876234484398e+38 or 6.269129896688427e-59 < t Initial program 11.6
Simplified4.5
rmApplied fma-udef4.5
rmApplied div-inv4.6
Applied associate-*l*4.6
Simplified4.6
rmApplied fma-udef4.6
Simplified4.5
if -2.3542876234484398e+38 < t < 6.269129896688427e-59Initial program 22.8
Final simplification13.1
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))))