\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(\sqrt{z} \cdot \left(\sqrt{2} \cdot {e}^{\left(\frac{t \cdot t}{2}\right)}\right)\right)double f(double x, double y, double z, double t) {
double r939927 = x;
double r939928 = 0.5;
double r939929 = r939927 * r939928;
double r939930 = y;
double r939931 = r939929 - r939930;
double r939932 = z;
double r939933 = 2.0;
double r939934 = r939932 * r939933;
double r939935 = sqrt(r939934);
double r939936 = r939931 * r939935;
double r939937 = t;
double r939938 = r939937 * r939937;
double r939939 = r939938 / r939933;
double r939940 = exp(r939939);
double r939941 = r939936 * r939940;
return r939941;
}
double f(double x, double y, double z, double t) {
double r939942 = x;
double r939943 = 0.5;
double r939944 = r939942 * r939943;
double r939945 = y;
double r939946 = r939944 - r939945;
double r939947 = z;
double r939948 = sqrt(r939947);
double r939949 = 2.0;
double r939950 = sqrt(r939949);
double r939951 = exp(1.0);
double r939952 = t;
double r939953 = r939952 * r939952;
double r939954 = r939953 / r939949;
double r939955 = pow(r939951, r939954);
double r939956 = r939950 * r939955;
double r939957 = r939948 * r939956;
double r939958 = r939946 * r939957;
return r939958;
}




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 *-un-lft-identity0.3
Applied exp-prod0.3
Simplified0.3
rmApplied associate-*l*0.3
rmApplied sqrt-prod0.5
Applied associate-*l*0.5
Final simplification0.5
herbie shell --seed 2020083 +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))))