\frac{x}{x + y \cdot e^{2 \cdot \left(\frac{z \cdot \sqrt{t + a}}{t} - \left(b - c\right) \cdot \left(\left(a + \frac{5}{6}\right) - \frac{2}{t \cdot 3}\right)\right)}}\frac{x}{\mathsf{fma}\left(y, e^{\mathsf{fma}\left(c - b, \frac{5}{6} + \left(a - \frac{\frac{2}{t}}{3}\right), \frac{\sqrt{t + a}}{\frac{t}{z}}\right) \cdot 2}, x\right)}double f(double x, double y, double z, double t, double a, double b, double c) {
double r20604908 = x;
double r20604909 = y;
double r20604910 = 2.0;
double r20604911 = z;
double r20604912 = t;
double r20604913 = a;
double r20604914 = r20604912 + r20604913;
double r20604915 = sqrt(r20604914);
double r20604916 = r20604911 * r20604915;
double r20604917 = r20604916 / r20604912;
double r20604918 = b;
double r20604919 = c;
double r20604920 = r20604918 - r20604919;
double r20604921 = 5.0;
double r20604922 = 6.0;
double r20604923 = r20604921 / r20604922;
double r20604924 = r20604913 + r20604923;
double r20604925 = 3.0;
double r20604926 = r20604912 * r20604925;
double r20604927 = r20604910 / r20604926;
double r20604928 = r20604924 - r20604927;
double r20604929 = r20604920 * r20604928;
double r20604930 = r20604917 - r20604929;
double r20604931 = r20604910 * r20604930;
double r20604932 = exp(r20604931);
double r20604933 = r20604909 * r20604932;
double r20604934 = r20604908 + r20604933;
double r20604935 = r20604908 / r20604934;
return r20604935;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r20604936 = x;
double r20604937 = y;
double r20604938 = c;
double r20604939 = b;
double r20604940 = r20604938 - r20604939;
double r20604941 = 5.0;
double r20604942 = 6.0;
double r20604943 = r20604941 / r20604942;
double r20604944 = a;
double r20604945 = 2.0;
double r20604946 = t;
double r20604947 = r20604945 / r20604946;
double r20604948 = 3.0;
double r20604949 = r20604947 / r20604948;
double r20604950 = r20604944 - r20604949;
double r20604951 = r20604943 + r20604950;
double r20604952 = r20604946 + r20604944;
double r20604953 = sqrt(r20604952);
double r20604954 = z;
double r20604955 = r20604946 / r20604954;
double r20604956 = r20604953 / r20604955;
double r20604957 = fma(r20604940, r20604951, r20604956);
double r20604958 = r20604957 * r20604945;
double r20604959 = exp(r20604958);
double r20604960 = fma(r20604937, r20604959, r20604936);
double r20604961 = r20604936 / r20604960;
return r20604961;
}




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
| Original | 4.1 |
|---|---|
| Target | 3.1 |
| Herbie | 1.8 |
Initial program 4.1
Simplified1.8
Final simplification1.8
herbie shell --seed 2019200 +o rules:numerics
(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)))))))))))