\frac{x \cdot 100}{x + y}\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{x}{y + x} \cdot 100\right)\right)double f(double x, double y) {
double r631107 = x;
double r631108 = 100.0;
double r631109 = r631107 * r631108;
double r631110 = y;
double r631111 = r631107 + r631110;
double r631112 = r631109 / r631111;
return r631112;
}
double f(double x, double y) {
double r631113 = x;
double r631114 = y;
double r631115 = r631114 + r631113;
double r631116 = r631113 / r631115;
double r631117 = 100.0;
double r631118 = r631116 * r631117;
double r631119 = expm1(r631118);
double r631120 = log1p(r631119);
return r631120;
}




Bits error versus x




Bits error versus y
Results
| Original | 0.4 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 0.4
rmApplied log1p-expm1-u0.4
Simplified0.2
Final simplification0.2
herbie shell --seed 2019194 +o rules:numerics
(FPCore (x y)
:name "Development.Shake.Progress:message from shake-0.15.5"
:herbie-target
(* (/ x 1.0) (/ 100.0 (+ x y)))
(/ (* x 100.0) (+ x y)))