\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}} \leq -7.400790680099435 \cdot 10^{-58}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\mathbf{elif}\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}} \leq 2.8929604868864384 \cdot 10^{-200}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{b}{\sqrt[3]{t}}}\\
\mathbf{elif}\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}} \leq \infty:\\
\;\;\;\;\frac{x + z \cdot \frac{y}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\mathbf{else}:\\
\;\;\;\;\frac{z}{b}\\
\end{array}(FPCore (x y z t a b) :precision binary64 (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))))
(FPCore (x y z t a b)
:precision binary64
(if (<=
(/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t)))
-7.400790680099435e-58)
(/ (+ x (/ y (/ t z))) (+ (+ a 1.0) (/ (* y b) t)))
(if (<=
(/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t)))
2.8929604868864384e-200)
(/
(+ x (/ (* y z) t))
(+ (+ a 1.0) (* (/ y (* (cbrt t) (cbrt t))) (/ b (cbrt t)))))
(if (<= (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) INFINITY)
(/ (+ x (* z (/ y t))) (+ (+ a 1.0) (/ (* y b) t)))
(/ z b)))))double code(double x, double y, double z, double t, double a, double b) {
return (x + ((y * z) / t)) / ((a + 1.0) + ((y * b) / t));
}
double code(double x, double y, double z, double t, double a, double b) {
double tmp;
if (((x + ((y * z) / t)) / ((a + 1.0) + ((y * b) / t))) <= -7.400790680099435e-58) {
tmp = (x + (y / (t / z))) / ((a + 1.0) + ((y * b) / t));
} else if (((x + ((y * z) / t)) / ((a + 1.0) + ((y * b) / t))) <= 2.8929604868864384e-200) {
tmp = (x + ((y * z) / t)) / ((a + 1.0) + ((y / (cbrt(t) * cbrt(t))) * (b / cbrt(t))));
} else if (((x + ((y * z) / t)) / ((a + 1.0) + ((y * b) / t))) <= ((double) INFINITY)) {
tmp = (x + (z * (y / t))) / ((a + 1.0) + ((y * b) / t));
} else {
tmp = z / b;
}
return tmp;
}




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 | 17.0 |
|---|---|
| Target | 13.4 |
| Herbie | 9.4 |
if (/.f64 (+.f64 x (/.f64 (*.f64 y z) t)) (+.f64 (+.f64 a 1) (/.f64 (*.f64 y b) t))) < -7.4007906800994353e-58Initial program 11.3
rmApplied associate-/l*_binary64_1911911.9
if -7.4007906800994353e-58 < (/.f64 (+.f64 x (/.f64 (*.f64 y z) t)) (+.f64 (+.f64 a 1) (/.f64 (*.f64 y b) t))) < 2.89296048688643843e-200Initial program 14.7
rmApplied add-cube-cbrt_binary64_1920914.8
Applied times-frac_binary64_1918011.7
if 2.89296048688643843e-200 < (/.f64 (+.f64 x (/.f64 (*.f64 y z) t)) (+.f64 (+.f64 a 1) (/.f64 (*.f64 y b) t))) < +inf.0Initial program 7.9
rmApplied associate-/l*_binary64_191198.5
rmApplied associate-/r/_binary64_191207.2
if +inf.0 < (/.f64 (+.f64 x (/.f64 (*.f64 y z) t)) (+.f64 (+.f64 a 1) (/.f64 (*.f64 y b) t))) Initial program 64.0
Taylor expanded around inf 3.0
Final simplification9.4
herbie shell --seed 2021043
(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.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))))