\sqrt{\left(x \cdot x + y \cdot y\right) + z \cdot z}\begin{array}{l}
\mathbf{if}\;x \le -9.459978473614104028021320068483777672215 \cdot 10^{97}:\\
\;\;\;\;-1 \cdot x\\
\mathbf{elif}\;x \le 5.252172480184967942795128237719074438802 \cdot 10^{109}:\\
\;\;\;\;\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 r716205 = x;
double r716206 = r716205 * r716205;
double r716207 = y;
double r716208 = r716207 * r716207;
double r716209 = r716206 + r716208;
double r716210 = z;
double r716211 = r716210 * r716210;
double r716212 = r716209 + r716211;
double r716213 = sqrt(r716212);
return r716213;
}
double f(double x, double y, double z) {
double r716214 = x;
double r716215 = -9.459978473614104e+97;
bool r716216 = r716214 <= r716215;
double r716217 = -1.0;
double r716218 = r716217 * r716214;
double r716219 = 5.252172480184968e+109;
bool r716220 = r716214 <= r716219;
double r716221 = r716214 * r716214;
double r716222 = y;
double r716223 = r716222 * r716222;
double r716224 = r716221 + r716223;
double r716225 = z;
double r716226 = r716225 * r716225;
double r716227 = r716224 + r716226;
double r716228 = sqrt(r716227);
double r716229 = r716220 ? r716228 : r716214;
double r716230 = r716216 ? r716218 : r716229;
return r716230;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 37.2 |
|---|---|
| Target | 25.1 |
| Herbie | 25.0 |
if x < -9.459978473614104e+97Initial program 53.3
Taylor expanded around -inf 17.9
if -9.459978473614104e+97 < x < 5.252172480184968e+109Initial program 28.9
if 5.252172480184968e+109 < x Initial program 54.9
Taylor expanded around inf 16.1
Final simplification25.0
herbie shell --seed 2019356
(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))))