\frac{x \cdot \left(y + z\right)}{z}\begin{array}{l}
\mathbf{if}\;\frac{x \cdot \left(y + z\right)}{z} = -\infty \lor \neg \left(\frac{x \cdot \left(y + z\right)}{z} \le -2.0930321799833828 \cdot 10^{-4} \lor \neg \left(\frac{x \cdot \left(y + z\right)}{z} \le 1.2379612958139637 \cdot 10^{-67} \lor \neg \left(\frac{x \cdot \left(y + z\right)}{z} \le 2.59072917384724201 \cdot 10^{244}\right)\right)\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{z}, x, x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(y + z\right)}{z}\\
\end{array}double f(double x, double y, double z) {
double r379959 = x;
double r379960 = y;
double r379961 = z;
double r379962 = r379960 + r379961;
double r379963 = r379959 * r379962;
double r379964 = r379963 / r379961;
return r379964;
}
double f(double x, double y, double z) {
double r379965 = x;
double r379966 = y;
double r379967 = z;
double r379968 = r379966 + r379967;
double r379969 = r379965 * r379968;
double r379970 = r379969 / r379967;
double r379971 = -inf.0;
bool r379972 = r379970 <= r379971;
double r379973 = -0.00020930321799833828;
bool r379974 = r379970 <= r379973;
double r379975 = 1.2379612958139637e-67;
bool r379976 = r379970 <= r379975;
double r379977 = 2.590729173847242e+244;
bool r379978 = r379970 <= r379977;
double r379979 = !r379978;
bool r379980 = r379976 || r379979;
double r379981 = !r379980;
bool r379982 = r379974 || r379981;
double r379983 = !r379982;
bool r379984 = r379972 || r379983;
double r379985 = r379966 / r379967;
double r379986 = fma(r379985, r379965, r379965);
double r379987 = r379984 ? r379986 : r379970;
return r379987;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 12.5 |
|---|---|
| Target | 2.9 |
| Herbie | 0.6 |
if (/ (* x (+ y z)) z) < -inf.0 or -0.00020930321799833828 < (/ (* x (+ y z)) z) < 1.2379612958139637e-67 or 2.590729173847242e+244 < (/ (* x (+ y z)) z) Initial program 22.4
Simplified0.9
if -inf.0 < (/ (* x (+ y z)) z) < -0.00020930321799833828 or 1.2379612958139637e-67 < (/ (* x (+ y z)) z) < 2.590729173847242e+244Initial program 0.3
Final simplification0.6
herbie shell --seed 2020035 +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))