\frac{x \cdot \left(y + z\right)}{z}\begin{array}{l}
\mathbf{if}\;y \le -2.047040197507521911880102455231371349848 \cdot 10^{123}:\\
\;\;\;\;x + \frac{\frac{\frac{x}{\sqrt[3]{z}}}{\sqrt[3]{z}}}{\frac{\sqrt[3]{z}}{y}}\\
\mathbf{elif}\;y \le 3.113004372037381436683458387632006392209 \cdot 10^{-7}:\\
\;\;\;\;\frac{x}{\frac{z}{y}} + x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, y, x\right)\\
\end{array}double f(double x, double y, double z) {
double r342022 = x;
double r342023 = y;
double r342024 = z;
double r342025 = r342023 + r342024;
double r342026 = r342022 * r342025;
double r342027 = r342026 / r342024;
return r342027;
}
double f(double x, double y, double z) {
double r342028 = y;
double r342029 = -2.047040197507522e+123;
bool r342030 = r342028 <= r342029;
double r342031 = x;
double r342032 = z;
double r342033 = cbrt(r342032);
double r342034 = r342031 / r342033;
double r342035 = r342034 / r342033;
double r342036 = r342033 / r342028;
double r342037 = r342035 / r342036;
double r342038 = r342031 + r342037;
double r342039 = 3.1130043720373814e-07;
bool r342040 = r342028 <= r342039;
double r342041 = r342032 / r342028;
double r342042 = r342031 / r342041;
double r342043 = r342042 + r342031;
double r342044 = r342031 / r342032;
double r342045 = fma(r342044, r342028, r342031);
double r342046 = r342040 ? r342043 : r342045;
double r342047 = r342030 ? r342038 : r342046;
return r342047;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 12.7 |
|---|---|
| Target | 3.0 |
| Herbie | 2.0 |
if y < -2.047040197507522e+123Initial program 12.7
Simplified6.7
rmApplied fma-udef6.7
Simplified10.7
rmApplied *-un-lft-identity10.7
Applied add-cube-cbrt11.3
Applied times-frac11.3
Applied associate-/r*7.8
Simplified7.8
if -2.047040197507522e+123 < y < 3.1130043720373814e-07Initial program 12.9
Simplified5.1
rmApplied fma-udef5.1
Simplified0.4
if 3.1130043720373814e-07 < y Initial program 11.9
Simplified3.6
Final simplification2.0
herbie shell --seed 2019196 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:choose from math-functions-0.1.5.2"
:herbie-target
(/ x (/ z (+ y z)))
(/ (* x (+ y z)) z))