\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le -2.0364539309351452 \cdot 10^{-27} \lor \neg \left(t \le 2.0111491653402853 \cdot 10^{93}\right):\\
\;\;\;\;\left(x + y \cdot \frac{z}{t}\right) \cdot \frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, a + 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{1}{\frac{t}{y \cdot z}}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r4069 = x;
double r4070 = y;
double r4071 = z;
double r4072 = r4070 * r4071;
double r4073 = t;
double r4074 = r4072 / r4073;
double r4075 = r4069 + r4074;
double r4076 = a;
double r4077 = 1.0;
double r4078 = r4076 + r4077;
double r4079 = b;
double r4080 = r4070 * r4079;
double r4081 = r4080 / r4073;
double r4082 = r4078 + r4081;
double r4083 = r4075 / r4082;
return r4083;
}
double f(double x, double y, double z, double t, double a, double b) {
double r4084 = t;
double r4085 = -2.036453930935145e-27;
bool r4086 = r4084 <= r4085;
double r4087 = 2.0111491653402853e+93;
bool r4088 = r4084 <= r4087;
double r4089 = !r4088;
bool r4090 = r4086 || r4089;
double r4091 = x;
double r4092 = y;
double r4093 = z;
double r4094 = r4093 / r4084;
double r4095 = r4092 * r4094;
double r4096 = r4091 + r4095;
double r4097 = 1.0;
double r4098 = r4092 / r4084;
double r4099 = b;
double r4100 = a;
double r4101 = 1.0;
double r4102 = r4100 + r4101;
double r4103 = fma(r4098, r4099, r4102);
double r4104 = r4097 / r4103;
double r4105 = r4096 * r4104;
double r4106 = r4092 * r4093;
double r4107 = r4084 / r4106;
double r4108 = r4097 / r4107;
double r4109 = r4091 + r4108;
double r4110 = r4092 * r4099;
double r4111 = r4110 / r4084;
double r4112 = r4102 + r4111;
double r4113 = r4109 / r4112;
double r4114 = r4090 ? r4105 : r4113;
return r4114;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 16.6 |
|---|---|
| Target | 13.4 |
| Herbie | 12.9 |
if t < -2.036453930935145e-27 or 2.0111491653402853e+93 < t Initial program 11.5
rmApplied div-inv11.6
Simplified8.3
rmApplied *-un-lft-identity8.3
Applied times-frac3.5
Simplified3.5
if -2.036453930935145e-27 < t < 2.0111491653402853e+93Initial program 20.9
rmApplied clear-num20.9
Final simplification12.9
herbie shell --seed 2020025 +o rules:numerics
(FPCore (x y z t a b)
:name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B"
:precision binary64
:herbie-target
(if (< t -1.3659085366310088e-271) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1) (/ (* y b) t))))