\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}{\mathsf{fma}\left(y, e^{2.0 \cdot \mathsf{fma}\left(c - b, \frac{5.0}{6.0} - \left(\frac{\frac{2.0}{t}}{3.0} - a\right), \frac{\sqrt{a + t}}{\frac{t}{z}}\right)}, x\right)}double f(double x, double y, double z, double t, double a, double b, double c) {
double r17719093 = x;
double r17719094 = y;
double r17719095 = 2.0;
double r17719096 = z;
double r17719097 = t;
double r17719098 = a;
double r17719099 = r17719097 + r17719098;
double r17719100 = sqrt(r17719099);
double r17719101 = r17719096 * r17719100;
double r17719102 = r17719101 / r17719097;
double r17719103 = b;
double r17719104 = c;
double r17719105 = r17719103 - r17719104;
double r17719106 = 5.0;
double r17719107 = 6.0;
double r17719108 = r17719106 / r17719107;
double r17719109 = r17719098 + r17719108;
double r17719110 = 3.0;
double r17719111 = r17719097 * r17719110;
double r17719112 = r17719095 / r17719111;
double r17719113 = r17719109 - r17719112;
double r17719114 = r17719105 * r17719113;
double r17719115 = r17719102 - r17719114;
double r17719116 = r17719095 * r17719115;
double r17719117 = exp(r17719116);
double r17719118 = r17719094 * r17719117;
double r17719119 = r17719093 + r17719118;
double r17719120 = r17719093 / r17719119;
return r17719120;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r17719121 = x;
double r17719122 = y;
double r17719123 = 2.0;
double r17719124 = c;
double r17719125 = b;
double r17719126 = r17719124 - r17719125;
double r17719127 = 5.0;
double r17719128 = 6.0;
double r17719129 = r17719127 / r17719128;
double r17719130 = t;
double r17719131 = r17719123 / r17719130;
double r17719132 = 3.0;
double r17719133 = r17719131 / r17719132;
double r17719134 = a;
double r17719135 = r17719133 - r17719134;
double r17719136 = r17719129 - r17719135;
double r17719137 = r17719134 + r17719130;
double r17719138 = sqrt(r17719137);
double r17719139 = z;
double r17719140 = r17719130 / r17719139;
double r17719141 = r17719138 / r17719140;
double r17719142 = fma(r17719126, r17719136, r17719141);
double r17719143 = r17719123 * r17719142;
double r17719144 = exp(r17719143);
double r17719145 = fma(r17719122, r17719144, r17719121);
double r17719146 = r17719121 / r17719145;
return r17719146;
}




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 | 3.6 |
|---|---|
| Target | 3.1 |
| Herbie | 1.6 |
Initial program 3.6
Simplified1.6
Final simplification1.6
herbie shell --seed 2019163 +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)))))))))))