Average Error: 37.3 → 23.8
Time: 17.7s
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}\;re \le -1.917798906540791 \cdot 10^{+55}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot 2.0\right) \cdot im}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le -2.707810411243158 \cdot 10^{-16}:\\ \;\;\;\;\left(\sqrt{im \cdot 2.0} \cdot \sqrt{\frac{im}{\sqrt{re \cdot re + im \cdot im} - re}}\right) \cdot 0.5\\ \mathbf{elif}\;re \le -1.2642914913772078 \cdot 10^{-75}:\\ \;\;\;\;\frac{\sqrt{2.0} \cdot im}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}} \cdot \left(-0.5\right)\\ \mathbf{elif}\;re \le -6.758694741001748 \cdot 10^{-220}:\\ \;\;\;\;\sqrt{\left(re + im\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le 1.4236521502141993 \cdot 10^{+97}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} + re\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{4.0 \cdot re} \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

Target

Original37.3
Target32.2
Herbie23.8
\[\begin{array}{l} \mathbf{if}\;re \lt 0:\\ \;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\\ \end{array}\]

Derivation

  1. Split input into 6 regimes
  2. if re < -1.917798906540791e+55

    1. Initial program 57.9

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
    2. Initial simplification57.9

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

      \[\leadsto 0.5 \cdot \sqrt{\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}} \cdot 2.0}\]
    5. Applied associate-*l/57.9

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

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

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

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

    if -1.917798906540791e+55 < re < -2.707810411243158e-16

    1. Initial program 46.8

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
    2. Initial simplification46.8

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

      \[\leadsto 0.5 \cdot \sqrt{\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}} \cdot 2.0}\]
    5. Applied associate-*l/46.8

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

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{\left(im \cdot 2.0\right) \cdot im}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    8. Using strategy rm
    9. Applied sqrt-undiv28.6

      \[\leadsto 0.5 \cdot \color{blue}{\sqrt{\frac{\left(im \cdot 2.0\right) \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    10. Using strategy rm
    11. Applied *-un-lft-identity28.6

      \[\leadsto 0.5 \cdot \sqrt{\frac{\left(im \cdot 2.0\right) \cdot im}{\color{blue}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}}}\]
    12. Applied times-frac28.8

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{\frac{im \cdot 2.0}{1} \cdot \frac{im}{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    13. Applied sqrt-prod36.4

      \[\leadsto 0.5 \cdot \color{blue}{\left(\sqrt{\frac{im \cdot 2.0}{1}} \cdot \sqrt{\frac{im}{\sqrt{re \cdot re + im \cdot im} - re}}\right)}\]
    14. Simplified36.4

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

    if -2.707810411243158e-16 < re < -1.2642914913772078e-75

    1. Initial program 42.0

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
    2. Initial simplification42.0

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

      \[\leadsto 0.5 \cdot \sqrt{\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}} \cdot 2.0}\]
    5. Applied associate-*l/42.0

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

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

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{-1 \cdot \left(\sqrt{2.0} \cdot im\right)}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    9. Simplified39.8

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

    if -1.2642914913772078e-75 < re < -6.758694741001748e-220

    1. Initial program 31.5

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
    2. Initial simplification31.5

      \[\leadsto 0.5 \cdot \sqrt{\left(\sqrt{re \cdot re + im \cdot im} + re\right) \cdot 2.0}\]
    3. Taylor expanded around 0 38.8

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

    if -6.758694741001748e-220 < re < 1.4236521502141993e+97

    1. Initial program 21.7

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
    2. Initial simplification21.7

      \[\leadsto 0.5 \cdot \sqrt{\left(\sqrt{re \cdot re + im \cdot im} + re\right) \cdot 2.0}\]
    3. Using strategy rm
    4. Applied add-sqr-sqrt21.7

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

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

    if 1.4236521502141993e+97 < re

    1. Initial program 49.5

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
    2. Initial simplification49.5

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

      \[\leadsto 0.5 \cdot \sqrt{\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}} \cdot 2.0}\]
    5. Applied associate-*l/60.6

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

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{\left(im \cdot 2.0\right) \cdot im}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    8. Using strategy rm
    9. Applied sqrt-undiv61.2

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

      \[\leadsto 0.5 \cdot \sqrt{\color{blue}{4.0 \cdot re}}\]
  3. Recombined 6 regimes into one program.
  4. Final simplification23.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.917798906540791 \cdot 10^{+55}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot 2.0\right) \cdot im}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le -2.707810411243158 \cdot 10^{-16}:\\ \;\;\;\;\left(\sqrt{im \cdot 2.0} \cdot \sqrt{\frac{im}{\sqrt{re \cdot re + im \cdot im} - re}}\right) \cdot 0.5\\ \mathbf{elif}\;re \le -1.2642914913772078 \cdot 10^{-75}:\\ \;\;\;\;\frac{\sqrt{2.0} \cdot im}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}} \cdot \left(-0.5\right)\\ \mathbf{elif}\;re \le -6.758694741001748 \cdot 10^{-220}:\\ \;\;\;\;\sqrt{\left(re + im\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le 1.4236521502141993 \cdot 10^{+97}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} + re\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{4.0 \cdot re} \cdot 0.5\\ \end{array}\]

Reproduce

herbie shell --seed 2018365 
(FPCore (re im)
  :name "math.sqrt on complex, real part"

  :herbie-target
  (if (< re 0) (* 0.5 (* (sqrt 2) (sqrt (/ (* im im) (- (sqrt (+ (* re re) (* im im))) re))))) (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))

  (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))

Details

Time bar (total: 12.2s)Debug log

start80.0ms

Algorithm
intervals

setup62.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 41.2b

localize42.0ms

Local error

Found 4 expressions with local error:

30.9b
(sqrt (+ (* re re) (* im im)))
0.5b
(+ (sqrt (+ (* re re) (* im im))) re)
0.2b
(sqrt (* (+ (sqrt (+ (* re re) (* im im))) re) 2.0))
0.0b
(+ (* re re) (* im im))

rewrite27.0ms

Algorithm
rewrite-expression-head
Counts
4 → 46
Calls

4 calls. Slowest were:

15.0ms
(+ (sqrt (+ (* re re) (* im im))) re)
4.0ms
(+ (* re re) (* im im))
4.0ms
(sqrt (+ (* re re) (* im im)))

series172.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

77.0ms
(sqrt (* (+ (sqrt (+ (* re re) (* im im))) re) 2.0))
39.0ms
(+ (sqrt (+ (* re re) (* im im))) re)
32.0ms
(sqrt (+ (* re re) (* im im)))
23.0ms
(+ (* re re) (* im im))

simplify749.0ms

Counts
22 → 58
Calls

22 calls. Slowest were:

326.0ms
(sqrt (* (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re)) 2.0))
152.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
149.0ms
(sqrt (* (+ (pow (sqrt (+ (* re re) (* im im))) 3) (pow re 3)) 2.0))

prune707.0ms

Pruning

8 alts after pruning (7 fresh and 1 done)

Merged error: 20.6b

localize16.0ms

Local error

Found 4 expressions with local error:

30.9b
(sqrt (+ (* re re) (* im im)))
30.9b
(sqrt (+ (* re re) (* im im)))
7.8b
(+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re)
0.5b
(* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im)))))

rewrite21.0ms

Algorithm
rewrite-expression-head
Counts
4 → 82
Calls

4 calls. Slowest were:

9.0ms
(* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im)))))
7.0ms
(+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re)
2.0ms
(sqrt (+ (* re re) (* im im)))

series83.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

24.0ms
(+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re)
22.0ms
(sqrt (+ (* re re) (* im im)))
19.0ms
(* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im)))))
19.0ms
(sqrt (+ (* re re) (* im im)))

simplify2.3s

Counts
64 → 94
Calls

64 calls. Slowest were:

219.0ms
(* (sqrt (sqrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im)))))) (sqrt (sqrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im)))))))
213.0ms
(* (sqrt (sqrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im)))))) (sqrt (sqrt (- (* re re) (* im im)))))
206.0ms
(* (sqrt (sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))) (sqrt (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))))

prune1.6s

Pruning

8 alts after pruning (6 fresh and 2 done)

Merged error: 20.6b

localize34.0ms

Local error

Found 4 expressions with local error:

32.9b
(sqrt (* (* im 2.0) im))
30.9b
(sqrt (+ (* re re) (* im im)))
0.5b
(- (sqrt (+ (* re re) (* im im))) re)
0.3b
(/ (sqrt (* (* im 2.0) im)) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))

rewrite25.0ms

Algorithm
rewrite-expression-head
Counts
4 → 83
Calls

4 calls. Slowest were:

12.0ms
(/ (sqrt (* (* im 2.0) im)) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))
10.0ms
(- (sqrt (+ (* re re) (* im im))) re)
2.0ms
(sqrt (+ (* re re) (* im im)))

series223.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

115.0ms
(/ (sqrt (* (* im 2.0) im)) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))
40.0ms
(- (sqrt (+ (* re re) (* im im))) re)
38.0ms
(sqrt (* (* im 2.0) im))
30.0ms
(sqrt (+ (* re re) (* im im)))

simplify1.2s

Counts
81 → 95
Calls

81 calls. Slowest were:

187.0ms
(/ (* (* (sqrt (* (* im 2.0) im)) (sqrt (* (* im 2.0) im))) (sqrt (* (* im 2.0) im))) (* (* (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) (sqrt (- (sqrt (+ (* re re) (* im im))) re))))
148.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
57.0ms
(/ (* (* im 2.0) im) (- (sqrt (+ (* re re) (* im im))) re))

prune1.3s

Pruning

12 alts after pruning (11 fresh and 1 done)

Merged error: 12.3b

localize8.0ms

Local error

Found 4 expressions with local error:

30.9b
(sqrt (+ (* re re) (* im im)))
23.3b
(/ (* (* im 2.0) im) (- (sqrt (+ (* re re) (* im im))) re))
7.3b
(sqrt (/ (* (* im 2.0) im) (- (sqrt (+ (* re re) (* im im))) re)))
0.5b
(- (sqrt (+ (* re re) (* im im))) re)

rewrite57.0ms

Algorithm
rewrite-expression-head
Counts
4 → 65
Calls

4 calls. Slowest were:

20.0ms
(- (sqrt (+ (* re re) (* im im))) re)
20.0ms
(sqrt (/ (* (* im 2.0) im) (- (sqrt (+ (* re re) (* im im))) re)))
14.0ms
(/ (* (* im 2.0) im) (- (sqrt (+ (* re re) (* im im))) re))

series268.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

125.0ms
(sqrt (/ (* (* im 2.0) im) (- (sqrt (+ (* re re) (* im im))) re)))
69.0ms
(/ (* (* im 2.0) im) (- (sqrt (+ (* re re) (* im im))) re))
41.0ms
(- (sqrt (+ (* re re) (* im im))) re)
32.0ms
(sqrt (+ (* re re) (* im im)))

simplify1.2s

Counts
43 → 77
Calls

43 calls. Slowest were:

256.0ms
(sqrt (/ (* (* im 2.0) im) (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re))))
137.0ms
(sqrt (/ (* (* im 2.0) im) (- (pow (sqrt (+ (* re re) (* im im))) 3) (pow re 3))))
119.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune918.0ms

Pruning

13 alts after pruning (12 fresh and 1 done)

Merged error: 12.2b

regimes474.0ms

Accuracy

49.5% (14.1b remaining)

Error of 23.8b against oracle of 9.6b and baseline of 37.6b

bsearch607.0ms