\frac{x \cdot \left(y + z\right)}{z}\begin{array}{l}
\mathbf{if}\;\frac{x \cdot \left(y + z\right)}{z} \le 5.46403839941028375 \cdot 10^{54}:\\
\;\;\;\;\frac{x}{\frac{z}{y + z}}\\
\mathbf{elif}\;\frac{x \cdot \left(y + z\right)}{z} \le 2.4690217933528748 \cdot 10^{307}:\\
\;\;\;\;\frac{x \cdot \left(y + z\right)}{z}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(\frac{y}{z} + 1\right)\\
\end{array}double f(double x, double y, double z) {
double r440323 = x;
double r440324 = y;
double r440325 = z;
double r440326 = r440324 + r440325;
double r440327 = r440323 * r440326;
double r440328 = r440327 / r440325;
return r440328;
}
double f(double x, double y, double z) {
double r440329 = x;
double r440330 = y;
double r440331 = z;
double r440332 = r440330 + r440331;
double r440333 = r440329 * r440332;
double r440334 = r440333 / r440331;
double r440335 = 5.464038399410284e+54;
bool r440336 = r440334 <= r440335;
double r440337 = r440331 / r440332;
double r440338 = r440329 / r440337;
double r440339 = 2.469021793352875e+307;
bool r440340 = r440334 <= r440339;
double r440341 = r440330 / r440331;
double r440342 = 1.0;
double r440343 = r440341 + r440342;
double r440344 = r440329 * r440343;
double r440345 = r440340 ? r440334 : r440344;
double r440346 = r440336 ? r440338 : r440345;
return r440346;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.7 |
|---|---|
| Target | 3.2 |
| Herbie | 1.7 |
if (/ (* x (+ y z)) z) < 5.464038399410284e+54Initial program 10.6
rmApplied associate-/l*2.2
if 5.464038399410284e+54 < (/ (* x (+ y z)) z) < 2.469021793352875e+307Initial program 0.2
if 2.469021793352875e+307 < (/ (* x (+ y z)) z) Initial program 63.5
rmApplied *-un-lft-identity63.5
Applied times-frac0.4
Simplified0.4
Taylor expanded around 0 0.4
Final simplification1.7
herbie shell --seed 2020062
(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))