\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}{x + y \cdot e^{2 \cdot \left(\log \left(e^{\mathsf{fma}\left(z \cdot \sqrt{t + a}, \frac{1}{t}, -\left(\left(a + \frac{5}{6}\right) - \frac{2}{t \cdot 3}\right) \cdot \left(b - c\right)\right)}\right) + \left(\left(a + \frac{5}{6}\right) - \frac{2}{t \cdot 3}\right) \cdot \left(\left(-\left(b - c\right)\right) + \left(b - c\right)\right)\right)}}double f(double x, double y, double z, double t, double a, double b, double c) {
double r350739 = x;
double r350740 = y;
double r350741 = 2.0;
double r350742 = z;
double r350743 = t;
double r350744 = a;
double r350745 = r350743 + r350744;
double r350746 = sqrt(r350745);
double r350747 = r350742 * r350746;
double r350748 = r350747 / r350743;
double r350749 = b;
double r350750 = c;
double r350751 = r350749 - r350750;
double r350752 = 5.0;
double r350753 = 6.0;
double r350754 = r350752 / r350753;
double r350755 = r350744 + r350754;
double r350756 = 3.0;
double r350757 = r350743 * r350756;
double r350758 = r350741 / r350757;
double r350759 = r350755 - r350758;
double r350760 = r350751 * r350759;
double r350761 = r350748 - r350760;
double r350762 = r350741 * r350761;
double r350763 = exp(r350762);
double r350764 = r350740 * r350763;
double r350765 = r350739 + r350764;
double r350766 = r350739 / r350765;
return r350766;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r350767 = x;
double r350768 = y;
double r350769 = 2.0;
double r350770 = z;
double r350771 = t;
double r350772 = a;
double r350773 = r350771 + r350772;
double r350774 = sqrt(r350773);
double r350775 = r350770 * r350774;
double r350776 = 1.0;
double r350777 = r350776 / r350771;
double r350778 = 5.0;
double r350779 = 6.0;
double r350780 = r350778 / r350779;
double r350781 = r350772 + r350780;
double r350782 = 3.0;
double r350783 = r350771 * r350782;
double r350784 = r350769 / r350783;
double r350785 = r350781 - r350784;
double r350786 = b;
double r350787 = c;
double r350788 = r350786 - r350787;
double r350789 = r350785 * r350788;
double r350790 = -r350789;
double r350791 = fma(r350775, r350777, r350790);
double r350792 = exp(r350791);
double r350793 = log(r350792);
double r350794 = -r350788;
double r350795 = r350794 + r350788;
double r350796 = r350785 * r350795;
double r350797 = r350793 + r350796;
double r350798 = r350769 * r350797;
double r350799 = exp(r350798);
double r350800 = r350768 * r350799;
double r350801 = r350767 + r350800;
double r350802 = r350767 / r350801;
return r350802;
}




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.8 |
|---|---|
| Target | 3.1 |
| Herbie | 2.7 |
Initial program 3.8
rmApplied div-inv3.8
Applied prod-diff22.5
Simplified2.7
rmApplied add-log-exp2.7
Final simplification2.7
herbie shell --seed 2020001 +o rules:numerics
(FPCore (x y z t a b c)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, I"
:precision binary64
:herbie-target
(if (< t -2.118326644891581e-50) (/ x (+ x (* y (exp (* 2 (- (+ (* a c) (* 0.8333333333333334 c)) (* a b))))))) (if (< t 5.196588770651547e-123) (/ x (+ x (* y (exp (* 2 (/ (- (* (* z (sqrt (+ t a))) (* (* 3 t) (- a (/ 5 6)))) (* (- (* (+ (/ 5 6) a) (* 3 t)) 2) (* (- a (/ 5 6)) (* (- b c) t)))) (* (* (* t t) 3) (- a (/ 5 6))))))))) (/ x (+ x (* y (exp (* 2 (- (/ (* z (sqrt (+ t a))) t) (* (- b c) (- (+ a (/ 5 6)) (/ 2 (* t 3))))))))))))
(/ x (+ x (* y (exp (* 2 (- (/ (* z (sqrt (+ t a))) t) (* (- b c) (- (+ a (/ 5 6)) (/ 2 (* t 3)))))))))))