Average Error: 38.8 → 31.0
Time: 4.9s
Precision: 64
\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[\begin{array}{l} \mathbf{if}\;im \le -7.09301478160325637202272415074052789653 \cdot 10^{-148}:\\ \;\;\;\;0.5 \cdot {\left(2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)\right)}^{\frac{1}{2}}\\ \mathbf{elif}\;im \le 3.42856224347509225387704726588764447776 \cdot 10^{-290}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 3.608790805799539988607503878238355677885 \cdot 10^{-252}:\\ \;\;\;\;0.5 \cdot e^{\frac{1}{2} \cdot \left(\log \left(\frac{1}{re}\right) + \log 1\right) + \log im}\\ \mathbf{elif}\;im \le 6.756937579891572770717908490390021157595 \cdot 10^{-175}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 1.612479874751917700729470905308994409174 \cdot 10^{-118}:\\ \;\;\;\;0.5 \cdot e^{\frac{1}{2} \cdot \left(\log \left(\frac{1}{re}\right) + \log 1\right) + \log im}\\ \mathbf{elif}\;im \le 5.383487462092644209013903086477279596812 \cdot 10^{-70}:\\ \;\;\;\;0.5 \cdot {\left(2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)\right)}^{\frac{1}{2}}\\ \mathbf{elif}\;im \le 1.670327607339557761275942305128351768159 \cdot 10^{-44}:\\ \;\;\;\;0.5 \cdot {\left(2 \cdot \frac{im \cdot im + 0}{\sqrt{re \cdot re + im \cdot im} + re}\right)}^{\frac{1}{2}}\\ \mathbf{elif}\;im \le 2.676644915706313570326639258989409597689 \cdot 10^{-6}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \end{array}\]
0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}
\begin{array}{l}
\mathbf{if}\;im \le -7.09301478160325637202272415074052789653 \cdot 10^{-148}:\\
\;\;\;\;0.5 \cdot {\left(2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)\right)}^{\frac{1}{2}}\\

\mathbf{elif}\;im \le 3.42856224347509225387704726588764447776 \cdot 10^{-290}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\

\mathbf{elif}\;im \le 3.608790805799539988607503878238355677885 \cdot 10^{-252}:\\
\;\;\;\;0.5 \cdot e^{\frac{1}{2} \cdot \left(\log \left(\frac{1}{re}\right) + \log 1\right) + \log im}\\

\mathbf{elif}\;im \le 6.756937579891572770717908490390021157595 \cdot 10^{-175}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\

\mathbf{elif}\;im \le 1.612479874751917700729470905308994409174 \cdot 10^{-118}:\\
\;\;\;\;0.5 \cdot e^{\frac{1}{2} \cdot \left(\log \left(\frac{1}{re}\right) + \log 1\right) + \log im}\\

\mathbf{elif}\;im \le 5.383487462092644209013903086477279596812 \cdot 10^{-70}:\\
\;\;\;\;0.5 \cdot {\left(2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)\right)}^{\frac{1}{2}}\\

\mathbf{elif}\;im \le 1.670327607339557761275942305128351768159 \cdot 10^{-44}:\\
\;\;\;\;0.5 \cdot {\left(2 \cdot \frac{im \cdot im + 0}{\sqrt{re \cdot re + im \cdot im} + re}\right)}^{\frac{1}{2}}\\

\mathbf{elif}\;im \le 2.676644915706313570326639258989409597689 \cdot 10^{-6}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\

\end{array}
double f(double re, double im) {
        double r16545 = 0.5;
        double r16546 = 2.0;
        double r16547 = re;
        double r16548 = r16547 * r16547;
        double r16549 = im;
        double r16550 = r16549 * r16549;
        double r16551 = r16548 + r16550;
        double r16552 = sqrt(r16551);
        double r16553 = r16552 - r16547;
        double r16554 = r16546 * r16553;
        double r16555 = sqrt(r16554);
        double r16556 = r16545 * r16555;
        return r16556;
}

double f(double re, double im) {
        double r16557 = im;
        double r16558 = -7.093014781603256e-148;
        bool r16559 = r16557 <= r16558;
        double r16560 = 0.5;
        double r16561 = 2.0;
        double r16562 = re;
        double r16563 = r16562 * r16562;
        double r16564 = r16557 * r16557;
        double r16565 = r16563 + r16564;
        double r16566 = sqrt(r16565);
        double r16567 = r16566 - r16562;
        double r16568 = r16561 * r16567;
        double r16569 = 0.5;
        double r16570 = pow(r16568, r16569);
        double r16571 = r16560 * r16570;
        double r16572 = 3.428562243475092e-290;
        bool r16573 = r16557 <= r16572;
        double r16574 = -2.0;
        double r16575 = r16574 * r16562;
        double r16576 = r16561 * r16575;
        double r16577 = sqrt(r16576);
        double r16578 = r16560 * r16577;
        double r16579 = 3.60879080579954e-252;
        bool r16580 = r16557 <= r16579;
        double r16581 = 1.0;
        double r16582 = r16581 / r16562;
        double r16583 = log(r16582);
        double r16584 = 1.0;
        double r16585 = log(r16584);
        double r16586 = r16583 + r16585;
        double r16587 = r16569 * r16586;
        double r16588 = log(r16557);
        double r16589 = r16587 + r16588;
        double r16590 = exp(r16589);
        double r16591 = r16560 * r16590;
        double r16592 = 6.756937579891573e-175;
        bool r16593 = r16557 <= r16592;
        double r16594 = 1.6124798747519177e-118;
        bool r16595 = r16557 <= r16594;
        double r16596 = 5.383487462092644e-70;
        bool r16597 = r16557 <= r16596;
        double r16598 = 1.6703276073395578e-44;
        bool r16599 = r16557 <= r16598;
        double r16600 = 0.0;
        double r16601 = r16564 + r16600;
        double r16602 = r16566 + r16562;
        double r16603 = r16601 / r16602;
        double r16604 = r16561 * r16603;
        double r16605 = pow(r16604, r16569);
        double r16606 = r16560 * r16605;
        double r16607 = 2.6766449157063136e-06;
        bool r16608 = r16557 <= r16607;
        double r16609 = r16557 - r16562;
        double r16610 = r16561 * r16609;
        double r16611 = sqrt(r16610);
        double r16612 = r16560 * r16611;
        double r16613 = r16608 ? r16578 : r16612;
        double r16614 = r16599 ? r16606 : r16613;
        double r16615 = r16597 ? r16571 : r16614;
        double r16616 = r16595 ? r16591 : r16615;
        double r16617 = r16593 ? r16578 : r16616;
        double r16618 = r16580 ? r16591 : r16617;
        double r16619 = r16573 ? r16578 : r16618;
        double r16620 = r16559 ? r16571 : r16619;
        return r16620;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 5 regimes
  2. if im < -7.093014781603256e-148 or 1.6124798747519177e-118 < im < 5.383487462092644e-70

    1. Initial program 36.6

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied pow1/236.6

      \[\leadsto 0.5 \cdot \color{blue}{{\left(2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)\right)}^{\frac{1}{2}}}\]

    if -7.093014781603256e-148 < im < 3.428562243475092e-290 or 3.60879080579954e-252 < im < 6.756937579891573e-175 or 1.6703276073395578e-44 < im < 2.6766449157063136e-06

    1. Initial program 40.7

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Taylor expanded around -inf 36.7

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(-2 \cdot re\right)}}\]

    if 3.428562243475092e-290 < im < 3.60879080579954e-252 or 6.756937579891573e-175 < im < 1.6124798747519177e-118

    1. Initial program 37.7

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied pow1/237.7

      \[\leadsto 0.5 \cdot \color{blue}{{\left(2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)\right)}^{\frac{1}{2}}}\]
    4. Taylor expanded around inf 38.6

      \[\leadsto 0.5 \cdot \color{blue}{e^{\frac{1}{2} \cdot \left(\left(\log \left(\frac{1}{re}\right) + \log 1\right) - 2 \cdot \log \left(\frac{1}{im}\right)\right)}}\]
    5. Simplified38.6

      \[\leadsto 0.5 \cdot \color{blue}{e^{\frac{1}{2} \cdot \left(\log \left(\frac{1}{re}\right) + \log 1\right) + \log im}}\]

    if 5.383487462092644e-70 < im < 1.6703276073395578e-44

    1. Initial program 27.4

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied pow1/227.4

      \[\leadsto 0.5 \cdot \color{blue}{{\left(2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)\right)}^{\frac{1}{2}}}\]
    4. Using strategy rm
    5. Applied flip--40.0

      \[\leadsto 0.5 \cdot {\left(2 \cdot \color{blue}{\frac{\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im} - re \cdot re}{\sqrt{re \cdot re + im \cdot im} + re}}\right)}^{\frac{1}{2}}\]
    6. Simplified28.6

      \[\leadsto 0.5 \cdot {\left(2 \cdot \frac{\color{blue}{im \cdot im + 0}}{\sqrt{re \cdot re + im \cdot im} + re}\right)}^{\frac{1}{2}}\]

    if 2.6766449157063136e-06 < im

    1. Initial program 41.7

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Taylor expanded around 0 14.8

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{im} - re\right)}\]
  3. Recombined 5 regimes into one program.
  4. Final simplification31.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -7.09301478160325637202272415074052789653 \cdot 10^{-148}:\\ \;\;\;\;0.5 \cdot {\left(2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)\right)}^{\frac{1}{2}}\\ \mathbf{elif}\;im \le 3.42856224347509225387704726588764447776 \cdot 10^{-290}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 3.608790805799539988607503878238355677885 \cdot 10^{-252}:\\ \;\;\;\;0.5 \cdot e^{\frac{1}{2} \cdot \left(\log \left(\frac{1}{re}\right) + \log 1\right) + \log im}\\ \mathbf{elif}\;im \le 6.756937579891572770717908490390021157595 \cdot 10^{-175}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 1.612479874751917700729470905308994409174 \cdot 10^{-118}:\\ \;\;\;\;0.5 \cdot e^{\frac{1}{2} \cdot \left(\log \left(\frac{1}{re}\right) + \log 1\right) + \log im}\\ \mathbf{elif}\;im \le 5.383487462092644209013903086477279596812 \cdot 10^{-70}:\\ \;\;\;\;0.5 \cdot {\left(2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)\right)}^{\frac{1}{2}}\\ \mathbf{elif}\;im \le 1.670327607339557761275942305128351768159 \cdot 10^{-44}:\\ \;\;\;\;0.5 \cdot {\left(2 \cdot \frac{im \cdot im + 0}{\sqrt{re \cdot re + im \cdot im} + re}\right)}^{\frac{1}{2}}\\ \mathbf{elif}\;im \le 2.676644915706313570326639258989409597689 \cdot 10^{-6}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2019347 
(FPCore (re im)
  :name "math.sqrt on complex, imaginary part, im greater than 0 branch"
  :precision binary64
  (* 0.5 (sqrt (* 2 (- (sqrt (+ (* re re) (* im im))) re)))))