\frac{x \cdot \left(y + z\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -8.77033482903865029679843273380425534796 \cdot 10^{-37} \lor \neg \left(x \le 3.269193493716526616235123635664496656065 \cdot 10^{-74}\right):\\
\;\;\;\;x \cdot \frac{y}{z} + x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, y, x\right)\\
\end{array}double f(double x, double y, double z) {
double r250151 = x;
double r250152 = y;
double r250153 = z;
double r250154 = r250152 + r250153;
double r250155 = r250151 * r250154;
double r250156 = r250155 / r250153;
return r250156;
}
double f(double x, double y, double z) {
double r250157 = x;
double r250158 = -8.77033482903865e-37;
bool r250159 = r250157 <= r250158;
double r250160 = 3.2691934937165266e-74;
bool r250161 = r250157 <= r250160;
double r250162 = !r250161;
bool r250163 = r250159 || r250162;
double r250164 = y;
double r250165 = z;
double r250166 = r250164 / r250165;
double r250167 = r250157 * r250166;
double r250168 = r250167 + r250157;
double r250169 = r250157 / r250165;
double r250170 = fma(r250169, r250164, r250157);
double r250171 = r250163 ? r250168 : r250170;
return r250171;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 12.4 |
|---|---|
| Target | 3.1 |
| Herbie | 1.7 |
if x < -8.77033482903865e-37 or 3.2691934937165266e-74 < x Initial program 18.3
Simplified0.5
rmApplied fma-udef0.5
Simplified0.5
if -8.77033482903865e-37 < x < 3.2691934937165266e-74Initial program 5.9
Simplified6.6
Taylor expanded around 0 3.4
Simplified3.0
Final simplification1.7
herbie shell --seed 2019304 +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))