\frac{x}{x + y \cdot e^{2.0 \cdot \left(\frac{z \cdot \sqrt{t + a}}{t} - \left(b - c\right) \cdot \left(\left(a + \frac{5.0}{6.0}\right) - \frac{2.0}{t \cdot 3.0}\right)\right)}}\frac{x}{e^{2.0 \cdot \log \left(e^{\frac{z}{\frac{t}{\sqrt{a + t}}} - \left(b - c\right) \cdot \left(\left(a - \frac{\frac{2.0}{t}}{3.0}\right) + \frac{5.0}{6.0}\right)}\right)} \cdot y + x}double f(double x, double y, double z, double t, double a, double b, double c) {
double r21832990 = x;
double r21832991 = y;
double r21832992 = 2.0;
double r21832993 = z;
double r21832994 = t;
double r21832995 = a;
double r21832996 = r21832994 + r21832995;
double r21832997 = sqrt(r21832996);
double r21832998 = r21832993 * r21832997;
double r21832999 = r21832998 / r21832994;
double r21833000 = b;
double r21833001 = c;
double r21833002 = r21833000 - r21833001;
double r21833003 = 5.0;
double r21833004 = 6.0;
double r21833005 = r21833003 / r21833004;
double r21833006 = r21832995 + r21833005;
double r21833007 = 3.0;
double r21833008 = r21832994 * r21833007;
double r21833009 = r21832992 / r21833008;
double r21833010 = r21833006 - r21833009;
double r21833011 = r21833002 * r21833010;
double r21833012 = r21832999 - r21833011;
double r21833013 = r21832992 * r21833012;
double r21833014 = exp(r21833013);
double r21833015 = r21832991 * r21833014;
double r21833016 = r21832990 + r21833015;
double r21833017 = r21832990 / r21833016;
return r21833017;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r21833018 = x;
double r21833019 = 2.0;
double r21833020 = z;
double r21833021 = t;
double r21833022 = a;
double r21833023 = r21833022 + r21833021;
double r21833024 = sqrt(r21833023);
double r21833025 = r21833021 / r21833024;
double r21833026 = r21833020 / r21833025;
double r21833027 = b;
double r21833028 = c;
double r21833029 = r21833027 - r21833028;
double r21833030 = r21833019 / r21833021;
double r21833031 = 3.0;
double r21833032 = r21833030 / r21833031;
double r21833033 = r21833022 - r21833032;
double r21833034 = 5.0;
double r21833035 = 6.0;
double r21833036 = r21833034 / r21833035;
double r21833037 = r21833033 + r21833036;
double r21833038 = r21833029 * r21833037;
double r21833039 = r21833026 - r21833038;
double r21833040 = exp(r21833039);
double r21833041 = log(r21833040);
double r21833042 = r21833019 * r21833041;
double r21833043 = exp(r21833042);
double r21833044 = y;
double r21833045 = r21833043 * r21833044;
double r21833046 = r21833045 + r21833018;
double r21833047 = r21833018 / r21833046;
return r21833047;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 3.9 |
|---|---|
| Target | 2.9 |
| Herbie | 3.2 |
Initial program 3.9
rmApplied add-log-exp8.4
Applied add-log-exp16.7
Applied diff-log16.7
Simplified3.2
Final simplification3.2
herbie shell --seed 2019165
(FPCore (x y z t a b c)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, I"
:herbie-target
(if (< t -2.118326644891581e-50) (/ x (+ x (* y (exp (* 2.0 (- (+ (* a c) (* 0.8333333333333334 c)) (* a b))))))) (if (< t 5.196588770651547e-123) (/ x (+ x (* y (exp (* 2.0 (/ (- (* (* z (sqrt (+ t a))) (* (* 3.0 t) (- a (/ 5.0 6.0)))) (* (- (* (+ (/ 5.0 6.0) a) (* 3.0 t)) 2.0) (* (- a (/ 5.0 6.0)) (* (- b c) t)))) (* (* (* t t) 3.0) (- a (/ 5.0 6.0))))))))) (/ x (+ x (* y (exp (* 2.0 (- (/ (* z (sqrt (+ t a))) t) (* (- b c) (- (+ a (/ 5.0 6.0)) (/ 2.0 (* t 3.0))))))))))))
(/ x (+ x (* y (exp (* 2.0 (- (/ (* z (sqrt (+ t a))) t) (* (- b c) (- (+ a (/ 5.0 6.0)) (/ 2.0 (* t 3.0)))))))))))