\frac{x \cdot \left(y + z\right)}{z}\begin{array}{l}
\mathbf{if}\;y \le -492310718521397431238656 \lor \neg \left(y \le 3.163987042355706814221308641241888055374 \cdot 10^{85}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, y, x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{y}} + x\\
\end{array}double f(double x, double y, double z) {
double r280093 = x;
double r280094 = y;
double r280095 = z;
double r280096 = r280094 + r280095;
double r280097 = r280093 * r280096;
double r280098 = r280097 / r280095;
return r280098;
}
double f(double x, double y, double z) {
double r280099 = y;
double r280100 = -4.923107185213974e+23;
bool r280101 = r280099 <= r280100;
double r280102 = 3.163987042355707e+85;
bool r280103 = r280099 <= r280102;
double r280104 = !r280103;
bool r280105 = r280101 || r280104;
double r280106 = x;
double r280107 = z;
double r280108 = r280106 / r280107;
double r280109 = fma(r280108, r280099, r280106);
double r280110 = r280107 / r280099;
double r280111 = r280106 / r280110;
double r280112 = r280111 + r280106;
double r280113 = r280105 ? r280109 : r280112;
return r280113;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 12.6 |
|---|---|
| Target | 2.9 |
| Herbie | 1.7 |
if y < -4.923107185213974e+23 or 3.163987042355707e+85 < y Initial program 12.4
Simplified4.5
if -4.923107185213974e+23 < y < 3.163987042355707e+85Initial program 12.7
Simplified4.8
rmApplied fma-udef4.8
Simplified2.3
rmApplied associate-/l*0.2
Final simplification1.7
herbie shell --seed 2019305 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:choose from math-functions-0.1.5.2"
:precision binary64
:herbie-target
(/ x (/ z (+ y z)))
(/ (* x (+ y z)) z))