\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 r415353 = x;
double r415354 = y;
double r415355 = z;
double r415356 = r415354 + r415355;
double r415357 = r415353 * r415356;
double r415358 = r415357 / r415355;
return r415358;
}
double f(double x, double y, double z) {
double r415359 = x;
double r415360 = y;
double r415361 = z;
double r415362 = r415360 + r415361;
double r415363 = r415359 * r415362;
double r415364 = r415363 / r415361;
double r415365 = 5.464038399410284e+54;
bool r415366 = r415364 <= r415365;
double r415367 = r415361 / r415362;
double r415368 = r415359 / r415367;
double r415369 = 2.469021793352875e+307;
bool r415370 = r415364 <= r415369;
double r415371 = r415360 / r415361;
double r415372 = 1.0;
double r415373 = r415371 + r415372;
double r415374 = r415359 * r415373;
double r415375 = r415370 ? r415364 : r415374;
double r415376 = r415366 ? r415368 : r415375;
return r415376;
}




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))