\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;y \le -2.701512089379426 \cdot 10^{-122} \lor \neg \left(y \le 3.481409033698228 \cdot 10^{-31}\right):\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1\right) + y \cdot \frac{b}{t}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{\frac{y}{\sqrt[3]{t} \cdot \sqrt[3]{t}}}{\frac{\sqrt[3]{t}}{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 r715005 = x;
double r715006 = y;
double r715007 = z;
double r715008 = r715006 * r715007;
double r715009 = t;
double r715010 = r715008 / r715009;
double r715011 = r715005 + r715010;
double r715012 = a;
double r715013 = 1.0;
double r715014 = r715012 + r715013;
double r715015 = b;
double r715016 = r715006 * r715015;
double r715017 = r715016 / r715009;
double r715018 = r715014 + r715017;
double r715019 = r715011 / r715018;
return r715019;
}
double f(double x, double y, double z, double t, double a, double b) {
double r715020 = y;
double r715021 = -2.701512089379426e-122;
bool r715022 = r715020 <= r715021;
double r715023 = 3.481409033698228e-31;
bool r715024 = r715020 <= r715023;
double r715025 = !r715024;
bool r715026 = r715022 || r715025;
double r715027 = x;
double r715028 = t;
double r715029 = z;
double r715030 = r715028 / r715029;
double r715031 = r715020 / r715030;
double r715032 = r715027 + r715031;
double r715033 = a;
double r715034 = 1.0;
double r715035 = r715033 + r715034;
double r715036 = b;
double r715037 = r715036 / r715028;
double r715038 = r715020 * r715037;
double r715039 = r715035 + r715038;
double r715040 = r715032 / r715039;
double r715041 = cbrt(r715028);
double r715042 = r715041 * r715041;
double r715043 = r715020 / r715042;
double r715044 = r715041 / r715029;
double r715045 = r715043 / r715044;
double r715046 = r715027 + r715045;
double r715047 = r715020 * r715036;
double r715048 = r715047 / r715028;
double r715049 = r715035 + r715048;
double r715050 = r715046 / r715049;
double r715051 = r715026 ? r715040 : r715050;
return r715051;
}




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.5 |
|---|---|
| Target | 13.3 |
| Herbie | 13.4 |
if y < -2.701512089379426e-122 or 3.481409033698228e-31 < y Initial program 25.1
rmApplied associate-/l*22.7
rmApplied *-un-lft-identity22.7
Applied times-frac19.4
Simplified19.4
if -2.701512089379426e-122 < y < 3.481409033698228e-31Initial program 3.0
rmApplied associate-/l*8.1
rmApplied *-un-lft-identity8.1
Applied add-cube-cbrt8.2
Applied times-frac8.2
Applied associate-/r*4.0
Simplified4.0
Final simplification13.4
herbie shell --seed 2020083
(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))))