\left(\left(x \cdot 0.5 - y\right) \cdot \sqrt{z \cdot 2}\right) \cdot e^{\frac{t \cdot t}{2}}\left(x \cdot 0.5 - y\right) \cdot \left(\left({z}^{\frac{1}{2}} \cdot \sqrt{2}\right) \cdot {\left(e^{t}\right)}^{\left(\frac{t}{2}\right)}\right)double f(double x, double y, double z, double t) {
double r822758 = x;
double r822759 = 0.5;
double r822760 = r822758 * r822759;
double r822761 = y;
double r822762 = r822760 - r822761;
double r822763 = z;
double r822764 = 2.0;
double r822765 = r822763 * r822764;
double r822766 = sqrt(r822765);
double r822767 = r822762 * r822766;
double r822768 = t;
double r822769 = r822768 * r822768;
double r822770 = r822769 / r822764;
double r822771 = exp(r822770);
double r822772 = r822767 * r822771;
return r822772;
}
double f(double x, double y, double z, double t) {
double r822773 = x;
double r822774 = 0.5;
double r822775 = r822773 * r822774;
double r822776 = y;
double r822777 = r822775 - r822776;
double r822778 = z;
double r822779 = 0.5;
double r822780 = pow(r822778, r822779);
double r822781 = 2.0;
double r822782 = sqrt(r822781);
double r822783 = r822780 * r822782;
double r822784 = t;
double r822785 = exp(r822784);
double r822786 = r822784 / r822781;
double r822787 = pow(r822785, r822786);
double r822788 = r822783 * r822787;
double r822789 = r822777 * r822788;
return r822789;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 0.3 |
|---|---|
| Target | 0.3 |
| Herbie | 0.5 |
Initial program 0.3
rmApplied associate-*l*0.3
rmApplied *-un-lft-identity0.3
Applied times-frac0.3
Applied exp-prod0.3
Simplified0.3
rmApplied sqrt-prod0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2020057 +o rules:numerics
(FPCore (x y z t)
:name "Data.Number.Erf:$cinvnormcdf from erf-2.0.0.0, A"
:precision binary64
:herbie-target
(* (* (- (* x 0.5) y) (sqrt (* z 2))) (pow (exp 1) (/ (* t t) 2)))
(* (* (- (* x 0.5) y) (sqrt (* z 2))) (exp (/ (* t t) 2))))