\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 r16510143 = x;
double r16510144 = y;
double r16510145 = 2.0;
double r16510146 = z;
double r16510147 = t;
double r16510148 = a;
double r16510149 = r16510147 + r16510148;
double r16510150 = sqrt(r16510149);
double r16510151 = r16510146 * r16510150;
double r16510152 = r16510151 / r16510147;
double r16510153 = b;
double r16510154 = c;
double r16510155 = r16510153 - r16510154;
double r16510156 = 5.0;
double r16510157 = 6.0;
double r16510158 = r16510156 / r16510157;
double r16510159 = r16510148 + r16510158;
double r16510160 = 3.0;
double r16510161 = r16510147 * r16510160;
double r16510162 = r16510145 / r16510161;
double r16510163 = r16510159 - r16510162;
double r16510164 = r16510155 * r16510163;
double r16510165 = r16510152 - r16510164;
double r16510166 = r16510145 * r16510165;
double r16510167 = exp(r16510166);
double r16510168 = r16510144 * r16510167;
double r16510169 = r16510143 + r16510168;
double r16510170 = r16510143 / r16510169;
return r16510170;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r16510171 = x;
double r16510172 = y;
double r16510173 = 2.0;
double r16510174 = c;
double r16510175 = b;
double r16510176 = r16510174 - r16510175;
double r16510177 = 5.0;
double r16510178 = 6.0;
double r16510179 = r16510177 / r16510178;
double r16510180 = t;
double r16510181 = r16510173 / r16510180;
double r16510182 = 3.0;
double r16510183 = r16510181 / r16510182;
double r16510184 = a;
double r16510185 = r16510183 - r16510184;
double r16510186 = r16510179 - r16510185;
double r16510187 = r16510184 + r16510180;
double r16510188 = sqrt(r16510187);
double r16510189 = z;
double r16510190 = r16510180 / r16510189;
double r16510191 = r16510188 / r16510190;
double r16510192 = fma(r16510176, r16510186, r16510191);
double r16510193 = r16510173 * r16510192;
double r16510194 = exp(r16510193);
double r16510195 = fma(r16510172, r16510194, r16510171);
double r16510196 = r16510171 / r16510195;
return r16510196;
}




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)))))))))))