\sqrt{\left(x \cdot x + y \cdot y\right) + z \cdot z}\begin{array}{l}
\mathbf{if}\;x \le -4.839580010133738883814333111888121327705 \cdot 10^{89}:\\
\;\;\;\;-x\\
\mathbf{elif}\;x \le 1.537188568549186890366688724633159259389 \cdot 10^{101}:\\
\;\;\;\;\sqrt{\left(x \cdot x + y \cdot y\right) + z \cdot z}\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}double f(double x, double y, double z) {
double r438912 = x;
double r438913 = r438912 * r438912;
double r438914 = y;
double r438915 = r438914 * r438914;
double r438916 = r438913 + r438915;
double r438917 = z;
double r438918 = r438917 * r438917;
double r438919 = r438916 + r438918;
double r438920 = sqrt(r438919);
return r438920;
}
double f(double x, double y, double z) {
double r438921 = x;
double r438922 = -4.839580010133739e+89;
bool r438923 = r438921 <= r438922;
double r438924 = -r438921;
double r438925 = 1.537188568549187e+101;
bool r438926 = r438921 <= r438925;
double r438927 = r438921 * r438921;
double r438928 = y;
double r438929 = r438928 * r438928;
double r438930 = r438927 + r438929;
double r438931 = z;
double r438932 = r438931 * r438931;
double r438933 = r438930 + r438932;
double r438934 = sqrt(r438933);
double r438935 = r438926 ? r438934 : r438921;
double r438936 = r438923 ? r438924 : r438935;
return r438936;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 37.5 |
|---|---|
| Target | 25.3 |
| Herbie | 25.4 |
if x < -4.839580010133739e+89Initial program 52.1
Taylor expanded around -inf 19.5
Simplified19.5
if -4.839580010133739e+89 < x < 1.537188568549187e+101Initial program 29.0
if 1.537188568549187e+101 < x Initial program 55.1
Taylor expanded around inf 17.4
Final simplification25.4
herbie shell --seed 2019326
(FPCore (x y z)
:name "FRP.Yampa.Vector3:vector3Rho from Yampa-0.10.2"
:precision binary64
:herbie-target
(if (< z -6.396479394109776e+136) (- z) (if (< z 7.320293694404182e+117) (sqrt (+ (+ (* z z) (* x x)) (* y y))) z))
(sqrt (+ (+ (* x x) (* y y)) (* z z))))