\frac{x \cdot y + z \cdot \left(t - a\right)}{y + z \cdot \left(b - y\right)}\mathsf{fma}\left(x, y, t \cdot z\right) \cdot \frac{1}{\mathsf{fma}\left(z, b - y, y\right)} - \frac{z}{\mathsf{fma}\left(z, b - y, y\right)} \cdot adouble f(double x, double y, double z, double t, double a, double b) {
double r508006 = x;
double r508007 = y;
double r508008 = r508006 * r508007;
double r508009 = z;
double r508010 = t;
double r508011 = a;
double r508012 = r508010 - r508011;
double r508013 = r508009 * r508012;
double r508014 = r508008 + r508013;
double r508015 = b;
double r508016 = r508015 - r508007;
double r508017 = r508009 * r508016;
double r508018 = r508007 + r508017;
double r508019 = r508014 / r508018;
return r508019;
}
double f(double x, double y, double z, double t, double a, double b) {
double r508020 = x;
double r508021 = y;
double r508022 = t;
double r508023 = z;
double r508024 = r508022 * r508023;
double r508025 = fma(r508020, r508021, r508024);
double r508026 = 1.0;
double r508027 = b;
double r508028 = r508027 - r508021;
double r508029 = fma(r508023, r508028, r508021);
double r508030 = r508026 / r508029;
double r508031 = r508025 * r508030;
double r508032 = r508023 / r508029;
double r508033 = a;
double r508034 = r508032 * r508033;
double r508035 = r508031 - r508034;
return r508035;
}




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 | 23.0 |
|---|---|
| Target | 17.8 |
| Herbie | 21.6 |
Initial program 23.0
rmApplied sub-neg23.0
Applied distribute-rgt-in23.0
Applied associate-+r+23.0
Simplified23.0
rmApplied distribute-lft-neg-out23.0
Applied unsub-neg23.0
Applied div-sub23.0
Simplified23.0
Simplified22.9
rmApplied associate-/r/21.5
rmApplied div-inv21.6
Final simplification21.6
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x y z t a b)
:name "Development.Shake.Progress:decay from shake-0.15.5"
:precision binary64
:herbie-target
(- (/ (+ (* z t) (* y x)) (+ y (* z (- b y)))) (/ a (+ (- b y) (/ y z))))
(/ (+ (* x y) (* z (- t a))) (+ y (* z (- b y)))))