\sqrt{\left(x \cdot x + y \cdot y\right) + z \cdot z}\begin{array}{l}
\mathbf{if}\;x \le -1.514147348156684897594805824258822056861 \cdot 10^{135}:\\
\;\;\;\;-x\\
\mathbf{elif}\;x \le 2.273383634008566533481719288833752498864 \cdot 10^{132}:\\
\;\;\;\;\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 r435529 = x;
double r435530 = r435529 * r435529;
double r435531 = y;
double r435532 = r435531 * r435531;
double r435533 = r435530 + r435532;
double r435534 = z;
double r435535 = r435534 * r435534;
double r435536 = r435533 + r435535;
double r435537 = sqrt(r435536);
return r435537;
}
double f(double x, double y, double z) {
double r435538 = x;
double r435539 = -1.514147348156685e+135;
bool r435540 = r435538 <= r435539;
double r435541 = -r435538;
double r435542 = 2.2733836340085665e+132;
bool r435543 = r435538 <= r435542;
double r435544 = r435538 * r435538;
double r435545 = y;
double r435546 = r435545 * r435545;
double r435547 = r435544 + r435546;
double r435548 = z;
double r435549 = r435548 * r435548;
double r435550 = r435547 + r435549;
double r435551 = sqrt(r435550);
double r435552 = r435543 ? r435551 : r435538;
double r435553 = r435540 ? r435541 : r435552;
return r435553;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 38.4 |
|---|---|
| Target | 25.8 |
| Herbie | 25.6 |
if x < -1.514147348156685e+135Initial program 60.9
Taylor expanded around -inf 15.9
Simplified15.9
if -1.514147348156685e+135 < x < 2.2733836340085665e+132Initial program 29.6
if 2.2733836340085665e+132 < x Initial program 59.6
Taylor expanded around inf 15.4
Final simplification25.6
herbie shell --seed 2019322
(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))))