\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\frac{\sqrt[3]{y} \cdot \sqrt[3]{y}}{\sqrt[3]{t} \cdot \sqrt[3]{t}} \cdot \frac{b \cdot \sqrt[3]{y}}{\sqrt[3]{t}} + \left(a + 1\right)}double f(double x, double y, double z, double t, double a, double b) {
double r981998 = x;
double r981999 = y;
double r982000 = z;
double r982001 = r981999 * r982000;
double r982002 = t;
double r982003 = r982001 / r982002;
double r982004 = r981998 + r982003;
double r982005 = a;
double r982006 = 1.0;
double r982007 = r982005 + r982006;
double r982008 = b;
double r982009 = r981999 * r982008;
double r982010 = r982009 / r982002;
double r982011 = r982007 + r982010;
double r982012 = r982004 / r982011;
return r982012;
}
double f(double x, double y, double z, double t, double a, double b) {
double r982013 = z;
double r982014 = t;
double r982015 = r982013 / r982014;
double r982016 = y;
double r982017 = x;
double r982018 = fma(r982015, r982016, r982017);
double r982019 = cbrt(r982016);
double r982020 = r982019 * r982019;
double r982021 = cbrt(r982014);
double r982022 = r982021 * r982021;
double r982023 = r982020 / r982022;
double r982024 = b;
double r982025 = r982024 * r982019;
double r982026 = r982025 / r982021;
double r982027 = r982023 * r982026;
double r982028 = a;
double r982029 = 1.0;
double r982030 = r982028 + r982029;
double r982031 = r982027 + r982030;
double r982032 = r982018 / r982031;
return r982032;
}




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.7 |
|---|---|
| Target | 13.0 |
| Herbie | 15.6 |
Initial program 16.7
Simplified16.4
rmApplied fma-udef16.4
Simplified15.8
rmApplied add-cube-cbrt16.0
Applied add-cube-cbrt16.0
Applied times-frac16.0
Applied associate-*l*15.2
Simplified15.6
Final simplification15.6
herbie shell --seed 2019196 +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))))