\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^{2 \cdot \mathsf{fma}\left(c - b, \frac{5}{6} + \left(a - \frac{\frac{2}{t}}{3}\right), \sqrt{t + a} \cdot \frac{z}{t}\right)}, x\right)}double f(double x, double y, double z, double t, double a, double b, double c) {
double r422735 = x;
double r422736 = y;
double r422737 = 2.0;
double r422738 = z;
double r422739 = t;
double r422740 = a;
double r422741 = r422739 + r422740;
double r422742 = sqrt(r422741);
double r422743 = r422738 * r422742;
double r422744 = r422743 / r422739;
double r422745 = b;
double r422746 = c;
double r422747 = r422745 - r422746;
double r422748 = 5.0;
double r422749 = 6.0;
double r422750 = r422748 / r422749;
double r422751 = r422740 + r422750;
double r422752 = 3.0;
double r422753 = r422739 * r422752;
double r422754 = r422737 / r422753;
double r422755 = r422751 - r422754;
double r422756 = r422747 * r422755;
double r422757 = r422744 - r422756;
double r422758 = r422737 * r422757;
double r422759 = exp(r422758);
double r422760 = r422736 * r422759;
double r422761 = r422735 + r422760;
double r422762 = r422735 / r422761;
return r422762;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r422763 = x;
double r422764 = y;
double r422765 = 2.0;
double r422766 = c;
double r422767 = b;
double r422768 = r422766 - r422767;
double r422769 = 5.0;
double r422770 = 6.0;
double r422771 = r422769 / r422770;
double r422772 = a;
double r422773 = t;
double r422774 = r422765 / r422773;
double r422775 = 3.0;
double r422776 = r422774 / r422775;
double r422777 = r422772 - r422776;
double r422778 = r422771 + r422777;
double r422779 = r422773 + r422772;
double r422780 = sqrt(r422779);
double r422781 = z;
double r422782 = r422781 / r422773;
double r422783 = r422780 * r422782;
double r422784 = fma(r422768, r422778, r422783);
double r422785 = r422765 * r422784;
double r422786 = exp(r422785);
double r422787 = fma(r422764, r422786, r422763);
double r422788 = r422763 / r422787;
return r422788;
}




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.9 |
|---|---|
| Target | 2.9 |
| Herbie | 1.6 |
Initial program 3.9
Simplified1.6
Final simplification1.6
herbie shell --seed 2019174 +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)))))))))))