\left(\left(x \cdot 0.5 - y\right) \cdot \sqrt{z \cdot 2}\right) \cdot e^{\frac{t \cdot t}{2}}\left(\mathsf{fma}\left(x, 0.5, -y\right) \cdot \left({\left(e^{\frac{t}{2}}\right)}^{t} \cdot \left(\left(\sqrt[3]{\sqrt{2}} \cdot \sqrt[3]{\sqrt{2}}\right) \cdot \sqrt{z}\right)\right)\right) \cdot \sqrt[3]{\sqrt{2}}double f(double x, double y, double z, double t) {
double r685061 = x;
double r685062 = 0.5;
double r685063 = r685061 * r685062;
double r685064 = y;
double r685065 = r685063 - r685064;
double r685066 = z;
double r685067 = 2.0;
double r685068 = r685066 * r685067;
double r685069 = sqrt(r685068);
double r685070 = r685065 * r685069;
double r685071 = t;
double r685072 = r685071 * r685071;
double r685073 = r685072 / r685067;
double r685074 = exp(r685073);
double r685075 = r685070 * r685074;
return r685075;
}
double f(double x, double y, double z, double t) {
double r685076 = x;
double r685077 = 0.5;
double r685078 = y;
double r685079 = -r685078;
double r685080 = fma(r685076, r685077, r685079);
double r685081 = t;
double r685082 = 2.0;
double r685083 = r685081 / r685082;
double r685084 = exp(r685083);
double r685085 = pow(r685084, r685081);
double r685086 = sqrt(r685082);
double r685087 = cbrt(r685086);
double r685088 = r685087 * r685087;
double r685089 = z;
double r685090 = sqrt(r685089);
double r685091 = r685088 * r685090;
double r685092 = r685085 * r685091;
double r685093 = r685080 * r685092;
double r685094 = r685093 * r685087;
return r685094;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 0.3 |
|---|---|
| Target | 0.3 |
| Herbie | 0.5 |
Initial program 0.3
Simplified0.3
rmApplied sqrt-prod0.5
Applied associate-*r*0.5
rmApplied associate-*r*0.5
Simplified0.5
rmApplied add-cube-cbrt0.5
Applied associate-*r*0.5
Simplified0.5
rmApplied pow10.5
Applied pow10.5
Applied pow-prod-down0.5
Applied pow10.5
Applied pow-prod-down0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2019179 +o rules:numerics
(FPCore (x y z t)
:name "Data.Number.Erf:$cinvnormcdf from erf-2.0.0.0, A"
:herbie-target
(* (* (- (* x 0.5) y) (sqrt (* z 2.0))) (pow (exp 1.0) (/ (* t t) 2.0)))
(* (* (- (* x 0.5) y) (sqrt (* z 2.0))) (exp (/ (* t t) 2.0))))