Average Error: 37.1 → 22.3
Time: 13.4s
Precision: 64
Internal Precision: 128
\[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[\begin{array}{l} \mathbf{if}\;im \le -7.5738613442925 \cdot 10^{+124}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-2.0\right) \cdot \left(re + im\right)}\\ \mathbf{elif}\;im \le -1.1129029891800812 \cdot 10^{-104}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{\left(2.0 \cdot im\right) \cdot im}}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\\ \mathbf{elif}\;im \le 2.6871600780710753 \cdot 10^{-213}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\ \mathbf{elif}\;im \le 4.245068343236042 \cdot 10^{+116}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt[3]{im \cdot im + re \cdot re}} \cdot \left|\sqrt[3]{im \cdot im + re \cdot re}\right| - re\right)}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im - re\right)} \cdot 0.5\\ \end{array}\]

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.5738613442925e+124

    1. Initial program 53.9

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\color{blue}{{im}^{2} + {re}^{2}}} - re\right)}\]
    3. Taylor expanded around -inf 8.9

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

    if -7.5738613442925e+124 < im < -1.1129029891800812e-104

    1. Initial program 21.5

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied flip--28.3

      \[\leadsto 0.5 \cdot \sqrt{2.0 \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}}}\]
    4. Applied associate-*r/28.3

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im} - re \cdot re\right)}{\sqrt{re \cdot re + im \cdot im} + re}}}\]
    5. Applied sqrt-div28.4

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im} - re \cdot re\right)}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}}\]
    6. Simplified21.6

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{im \cdot \left(im \cdot 2.0\right)}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\]

    if -1.1129029891800812e-104 < im < 2.6871600780710753e-213

    1. Initial program 39.3

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied add-cube-cbrt41.3

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{\left(\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right) \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}} - re\right)}\]
    4. Taylor expanded around -inf 34.8

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

    if 2.6871600780710753e-213 < im < 4.245068343236042e+116

    1. Initial program 27.1

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied add-cube-cbrt27.4

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\color{blue}{\left(\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}\right) \cdot \sqrt[3]{re \cdot re + im \cdot im}}} - re\right)}\]
    4. Applied sqrt-prod27.4

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{\sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}}} - re\right)}\]
    5. Simplified27.4

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{\left|\sqrt[3]{re \cdot re + im \cdot im}\right|} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}} - re\right)}\]

    if 4.245068343236042e+116 < im

    1. Initial program 52.4

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied add-cube-cbrt52.5

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{\left(\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right) \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}} - re\right)}\]
    4. Taylor expanded around 0 9.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -7.5738613442925 \cdot 10^{+124}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-2.0\right) \cdot \left(re + im\right)}\\ \mathbf{elif}\;im \le -1.1129029891800812 \cdot 10^{-104}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{\left(2.0 \cdot im\right) \cdot im}}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\\ \mathbf{elif}\;im \le 2.6871600780710753 \cdot 10^{-213}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\ \mathbf{elif}\;im \le 4.245068343236042 \cdot 10^{+116}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\sqrt[3]{im \cdot im + re \cdot re}} \cdot \left|\sqrt[3]{im \cdot im + re \cdot re}\right| - re\right)}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(im - re\right)} \cdot 0.5\\ \end{array}\]

Reproduce

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

Details

Time bar (total: 12.3s)Debug log

sample175.0ms

Algorithm
intervals

simplify45.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

44.0ms
(* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re))))

prune14.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 36.7b

localize68.0ms

Local error

Found 4 expressions with local error:

28.7b
(sqrt (+ (* re re) (* im im)))
1.0b
(- (sqrt (+ (* re re) (* im im))) re)
0.0b
(sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))
0.0b
(+ (* re re) (* im im))

rewrite40.0ms

Algorithm
rewrite-expression-head
Counts
4 → 47
Calls

4 calls. Slowest were:

22.0ms
(- (sqrt (+ (* re re) (* im im))) re)
6.0ms
(sqrt (+ (* re re) (* im im)))
4.0ms
(+ (* re re) (* im im))

series227.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

123.0ms
(sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))
47.0ms
(sqrt (+ (* re re) (* im im)))
41.0ms
(- (sqrt (+ (* re re) (* im im))) re)
15.0ms
(+ (* re re) (* im im))

simplify864.0ms

Counts
22 → 59
Calls

22 calls. Slowest were:

354.0ms
(sqrt (* 2.0 (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re))))
283.0ms
(sqrt (* 2.0 (- (pow (sqrt (+ (* re re) (* im im))) 3) (pow re 3))))
136.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune804.0ms

Pruning

7 alts after pruning (7 fresh and 0 done)

Merged error: 15.1b

localize26.0ms

Local error

Found 4 expressions with local error:

28.7b
(sqrt (+ (pow im 2) (pow re 2)))
1.0b
(- (sqrt (+ (pow im 2) (pow re 2))) re)
0.0b
(sqrt (* 2.0 (- (sqrt (+ (pow im 2) (pow re 2))) re)))
0.0b
(+ (pow im 2) (pow re 2))

rewrite44.0ms

Algorithm
rewrite-expression-head
Counts
4 → 49
Calls

4 calls. Slowest were:

32.0ms
(- (sqrt (+ (pow im 2) (pow re 2))) re)
6.0ms
(sqrt (+ (pow im 2) (pow re 2)))
3.0ms
(+ (pow im 2) (pow re 2))

series183.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

106.0ms
(sqrt (* 2.0 (- (sqrt (+ (pow im 2) (pow re 2))) re)))
33.0ms
(- (sqrt (+ (pow im 2) (pow re 2))) re)
23.0ms
(+ (pow im 2) (pow re 2))
21.0ms
(sqrt (+ (pow im 2) (pow re 2)))

simplify660.0ms

Counts
24 → 61
Calls

24 calls. Slowest were:

224.0ms
(sqrt (* 2.0 (- (* (sqrt (+ (pow im 2) (pow re 2))) (sqrt (+ (pow im 2) (pow re 2)))) (* re re))))
202.0ms
(sqrt (* 2.0 (- (pow (sqrt (+ (pow im 2) (pow re 2))) 3) (pow re 3))))
132.0ms
(sqrt (- (* (pow im 2) (pow im 2)) (* (pow re 2) (pow re 2))))

prune774.0ms

Pruning

6 alts after pruning (6 fresh and 0 done)

Merged error: 9.6b

localize20.0ms

Local error

Found 4 expressions with local error:

29.6b
(cbrt (+ (* re re) (* im im)))
29.6b
(cbrt (+ (* re re) (* im im)))
6.4b
(- (* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im))))) re)
0.3b
(* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im)))))

rewrite17.0ms

Algorithm
rewrite-expression-head
Counts
4 → 62
Calls

4 calls. Slowest were:

7.0ms
(- (* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im))))) re)
6.0ms
(* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im)))))
1.0ms
(cbrt (+ (* re re) (* im im)))

series376.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

108.0ms
(* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im)))))
104.0ms
(- (* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im))))) re)
84.0ms
(cbrt (+ (* re re) (* im im)))
80.0ms
(cbrt (+ (* re re) (* im im)))

simplify1.4s

Counts
38 → 74
Calls

38 calls. Slowest were:

292.0ms
(- (+ (* (fabs (pow (+ (pow im 2) (pow re 2)) 1/3)) (pow im 1/3)) (* 1/6 (* (* (pow re 2) (fabs (pow (+ (pow im 2) (pow re 2)) 1/3))) (pow (/ 1 (pow im 5)) 1/3)))) re)
210.0ms
(sqrt (cbrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im))))))
178.0ms
(+ (* (fabs (pow (+ (pow im 2) (pow re 2)) 1/3)) (pow im 1/3)) (* 1/6 (* (* (pow re 2) (fabs (pow (+ (pow im 2) (pow re 2)) 1/3))) (pow (/ 1 (pow im 5)) 1/3))))

prune1.1s

Pruning

8 alts after pruning (7 fresh and 1 done)

Merged error: 9.6b

localize20.0ms

Local error

Found 4 expressions with local error:

28.7b
(sqrt (+ (* re re) (* im im)))
28.7b
(sqrt (+ (* re re) (* im im)))
28.7b
(sqrt (+ (* re re) (* im im)))
10.5b
(- (* (* (cbrt (sqrt (+ (* re re) (* im im)))) (cbrt (sqrt (+ (* re re) (* im im))))) (cbrt (sqrt (+ (* re re) (* im im))))) re)

rewrite50.0ms

Algorithm
rewrite-expression-head
Counts
4 → 53
Calls

4 calls. Slowest were:

44.0ms
(- (* (* (cbrt (sqrt (+ (* re re) (* im im)))) (cbrt (sqrt (+ (* re re) (* im im))))) (cbrt (sqrt (+ (* re re) (* im im))))) re)
2.0ms
(sqrt (+ (* re re) (* im im)))
2.0ms
(sqrt (+ (* re re) (* im im)))

series109.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

31.0ms
(sqrt (+ (* re re) (* im im)))
31.0ms
(- (* (* (cbrt (sqrt (+ (* re re) (* im im)))) (cbrt (sqrt (+ (* re re) (* im im))))) (cbrt (sqrt (+ (* re re) (* im im))))) re)
29.0ms
(sqrt (+ (* re re) (* im im)))
19.0ms
(sqrt (+ (* re re) (* im im)))

simplify696.0ms

Counts
30 → 65
Calls

30 calls. Slowest were:

165.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
142.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
139.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune939.0ms

Pruning

8 alts after pruning (7 fresh and 1 done)

Merged error: 9.6b

regimes357.0ms

Accuracy

54.2% (12.9b remaining)

Error of 22.3b against oracle of 9.5b and baseline of 37.6b

bsearch390.0ms

end0.0ms

sample2.9s

Algorithm
intervals