\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;im \leq 1.542344810860402 \cdot 10^{-147}:\\
\;\;\;\;\frac{im}{\sqrt[3]{re} \cdot \left(\sqrt[3]{\sqrt[3]{re} \cdot \sqrt[3]{re}} \cdot \sqrt[3]{\sqrt[3]{re}}\right)} \cdot \left(-0.5 \cdot \frac{im}{\sqrt[3]{re}}\right) - re\\
\mathbf{elif}\;im \leq 2.040124260634893 \cdot 10^{+114}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;im\\
\end{array}(FPCore (re im) :precision binary64 (sqrt (+ (* re re) (* im im))))
(FPCore (re im)
:precision binary64
(if (<= im 1.542344810860402e-147)
(-
(*
(/ im (* (cbrt re) (* (cbrt (* (cbrt re) (cbrt re))) (cbrt (cbrt re)))))
(* -0.5 (/ im (cbrt re))))
re)
(if (<= im 2.040124260634893e+114) (sqrt (+ (* re re) (* im im))) im)))double code(double re, double im) {
return sqrt((re * re) + (im * im));
}
double code(double re, double im) {
double tmp;
if (im <= 1.542344810860402e-147) {
tmp = ((im / (cbrt(re) * (cbrt(cbrt(re) * cbrt(re)) * cbrt(cbrt(re))))) * (-0.5 * (im / cbrt(re)))) - re;
} else if (im <= 2.040124260634893e+114) {
tmp = sqrt((re * re) + (im * im));
} else {
tmp = im;
}
return tmp;
}



Bits error versus re



Bits error versus im
Results
if im < 1.5423448108604021e-147Initial program 32.5
Taylor expanded around -inf 8.1
Simplified8.1
rmApplied add-cube-cbrt_binary648.1
Applied times-frac_binary645.4
Applied associate-*l*_binary645.4
Simplified5.4
rmApplied add-cube-cbrt_binary645.4
Applied cbrt-prod_binary645.4
if 1.5423448108604021e-147 < im < 2.0401242606348929e114Initial program 11.6
if 2.0401242606348929e114 < im Initial program 53.1
Taylor expanded around 0 5.4
Final simplification7.3
herbie shell --seed 2021173
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))