\sqrt{\left(x \cdot x + y \cdot y\right) + z \cdot z}\begin{array}{l}
\mathbf{if}\;x \le -1.35612836383285588 \cdot 10^{108}:\\
\;\;\;\;-x\\
\mathbf{elif}\;x \le 1.04793530695557172 \cdot 10^{77}:\\
\;\;\;\;\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 r846625 = x;
double r846626 = r846625 * r846625;
double r846627 = y;
double r846628 = r846627 * r846627;
double r846629 = r846626 + r846628;
double r846630 = z;
double r846631 = r846630 * r846630;
double r846632 = r846629 + r846631;
double r846633 = sqrt(r846632);
return r846633;
}
double f(double x, double y, double z) {
double r846634 = x;
double r846635 = -1.356128363832856e+108;
bool r846636 = r846634 <= r846635;
double r846637 = -r846634;
double r846638 = 1.0479353069555717e+77;
bool r846639 = r846634 <= r846638;
double r846640 = r846634 * r846634;
double r846641 = y;
double r846642 = r846641 * r846641;
double r846643 = r846640 + r846642;
double r846644 = z;
double r846645 = r846644 * r846644;
double r846646 = r846643 + r846645;
double r846647 = sqrt(r846646);
double r846648 = r846639 ? r846647 : r846634;
double r846649 = r846636 ? r846637 : r846648;
return r846649;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 38.3 |
|---|---|
| Target | 25.7 |
| Herbie | 26.2 |
if x < -1.356128363832856e+108Initial program 55.3
Taylor expanded around -inf 18.3
Simplified18.3
if -1.356128363832856e+108 < x < 1.0479353069555717e+77Initial program 29.8
if 1.0479353069555717e+77 < x Initial program 53.1
Taylor expanded around inf 20.4
Final simplification26.2
herbie shell --seed 2020046
(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))))