\frac{x \cdot \left(y + z\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -8.53005333076934627 \cdot 10^{-4}:\\
\;\;\;\;x \cdot \left(\frac{y}{z} + 1\right)\\
\mathbf{elif}\;z \le 0.0968242458288034874:\\
\;\;\;\;\frac{x \cdot y}{z} + x\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{y + z}}\\
\end{array}double f(double x, double y, double z) {
double r717374 = x;
double r717375 = y;
double r717376 = z;
double r717377 = r717375 + r717376;
double r717378 = r717374 * r717377;
double r717379 = r717378 / r717376;
return r717379;
}
double f(double x, double y, double z) {
double r717380 = z;
double r717381 = -0.0008530053330769346;
bool r717382 = r717380 <= r717381;
double r717383 = x;
double r717384 = y;
double r717385 = r717384 / r717380;
double r717386 = 1.0;
double r717387 = r717385 + r717386;
double r717388 = r717383 * r717387;
double r717389 = 0.09682424582880349;
bool r717390 = r717380 <= r717389;
double r717391 = r717383 * r717384;
double r717392 = r717391 / r717380;
double r717393 = r717392 + r717383;
double r717394 = r717384 + r717380;
double r717395 = r717380 / r717394;
double r717396 = r717383 / r717395;
double r717397 = r717390 ? r717393 : r717396;
double r717398 = r717382 ? r717388 : r717397;
return r717398;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.5 |
|---|---|
| Target | 3.2 |
| Herbie | 1.6 |
if z < -0.0008530053330769346Initial program 16.1
rmApplied *-un-lft-identity16.1
Applied times-frac0.1
Simplified0.1
Taylor expanded around 0 0.1
if -0.0008530053330769346 < z < 0.09682424582880349Initial program 7.0
rmApplied *-un-lft-identity7.0
Applied times-frac8.0
Simplified8.0
Taylor expanded around 0 8.0
rmApplied *-un-lft-identity8.0
Applied associate-*l*8.0
Simplified3.7
if 0.09682424582880349 < z Initial program 17.1
rmApplied associate-/l*0.1
Final simplification1.6
herbie shell --seed 2020042
(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))