Average Error: 37.7 → 23.3
Time: 11.6s
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.0623581109672193 \cdot 10^{+112}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot 2.0\right) \cdot im}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le -1.8516230029597217 \cdot 10^{-61}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2.0} \cdot \left(-im\right)}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\\ \mathbf{elif}\;re \le -2.094966116257524 \cdot 10^{-93}:\\ \;\;\;\;\left(\frac{\sqrt{im}}{\sqrt{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}} \cdot \frac{\sqrt{im \cdot 2.0}}{\sqrt{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}}\right) \cdot 0.5\\ \mathbf{elif}\;re \le -5.77928626929408 \cdot 10^{-138}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} + re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le -1.8303214098285669 \cdot 10^{-162}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + im\right) \cdot 2.0}\\ \mathbf{elif}\;re \le 3.3926804385297135 \cdot 10^{+112}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} + re\right)} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(re + 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

Target

Original37.7
Target32.8
Herbie23.3
\[\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.0623581109672193e+112

    1. Initial program 59.8

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

      \[\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/59.8

      \[\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-div59.8

      \[\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. Simplified43.5

      \[\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}}\]
    7. Taylor expanded around -inf 18.9

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

    if -1.0623581109672193e+112 < re < -1.8516230029597217e-61

    1. Initial program 48.0

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

      \[\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/48.0

      \[\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-div48.1

      \[\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. Simplified29.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}}\]
    7. Taylor expanded around -inf 39.1

      \[\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}}\]
    8. Simplified39.1

      \[\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.8516230029597217e-61 < re < -2.094966116257524e-93

    1. Initial program 39.2

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]
    2. Using strategy rm
    3. Applied flip-+39.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/39.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-div39.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. Simplified31.1

      \[\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}}\]
    7. Using strategy rm
    8. Applied add-sqr-sqrt31.1

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

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{im} \cdot \sqrt{im \cdot 2.0}}}{\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}} \cdot \sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\]
    11. Applied times-frac40.9

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

    if -2.094966116257524e-93 < re < -5.77928626929408e-138 or -1.8303214098285669e-162 < re < 3.3926804385297135e+112

    1. Initial program 23.7

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

    if -5.77928626929408e-138 < re < -1.8303214098285669e-162

    1. Initial program 26.4

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

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

    if 3.3926804385297135e+112 < re

    1. Initial program 50.8

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\color{blue}{re} + re\right)}\]
  3. Recombined 6 regimes into one program.
  4. Final simplification23.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.0623581109672193 \cdot 10^{+112}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot 2.0\right) \cdot im}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le -1.8516230029597217 \cdot 10^{-61}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2.0} \cdot \left(-im\right)}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\\ \mathbf{elif}\;re \le -2.094966116257524 \cdot 10^{-93}:\\ \;\;\;\;\left(\frac{\sqrt{im}}{\sqrt{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}} \cdot \frac{\sqrt{im \cdot 2.0}}{\sqrt{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}}\right) \cdot 0.5\\ \mathbf{elif}\;re \le -5.77928626929408 \cdot 10^{-138}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} + re\right)} \cdot 0.5\\ \mathbf{elif}\;re \le -1.8303214098285669 \cdot 10^{-162}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + im\right) \cdot 2.0}\\ \mathbf{elif}\;re \le 3.3926804385297135 \cdot 10^{+112}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} + re\right)} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(re + re\right)} \cdot 0.5\\ \end{array}\]

Reproduce

herbie shell --seed 2019004 
(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: 10.3s)Debug log

sample103.0ms

Algorithm
intervals

simplify18.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

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

prune12.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 41.4b

localize68.0ms

Local error

Found 3 expressions with local error:

31.9b
(sqrt (+ (* re re) (* im im)))
1.0b
(+ (sqrt (+ (* re re) (* im im))) re)
0.2b
(sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))

rewrite11.0ms

Algorithm
rewrite-expression-head
Counts
3 → 35
Calls

3 calls. Slowest were:

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

series132.0ms

Counts
3 → 9
Calls

3 calls. Slowest were:

90.0ms
(sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))
23.0ms
(+ (sqrt (+ (* re re) (* im im))) re)
19.0ms
(sqrt (+ (* re re) (* im im)))

simplify666.0ms

Counts
18 → 44
Calls

18 calls. Slowest were:

321.0ms
(sqrt (* 2.0 (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re))))
135.0ms
(sqrt (* 2.0 (+ (pow (sqrt (+ (* re re) (* im im))) 3) (pow re 3))))
133.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune480.0ms

Pruning

5 alts after pruning (4 fresh and 1 done)

Merged error: 21.2b

localize20.0ms

Local error

Found 4 expressions with local error:

31.9b
(sqrt (+ (* re re) (* im im)))
31.1b
(sqrt (* im (* im 2.0)))
0.4b
(- (sqrt (+ (* re re) (* im im))) re)
0.3b
(/ (sqrt (* im (* im 2.0))) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))

rewrite31.0ms

Algorithm
rewrite-expression-head
Counts
4 → 83
Calls

4 calls. Slowest were:

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

series190.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

93.0ms
(/ (sqrt (* im (* im 2.0))) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))
43.0ms
(- (sqrt (+ (* re re) (* im im))) re)
30.0ms
(sqrt (* im (* im 2.0)))
23.0ms
(sqrt (+ (* re re) (* im im)))

simplify1.1s

Counts
81 → 95
Calls

81 calls. Slowest were:

191.0ms
(/ (* (* (sqrt (* im (* im 2.0))) (sqrt (* im (* im 2.0)))) (sqrt (* im (* im 2.0)))) (* (* (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) (sqrt (- (sqrt (+ (* re re) (* im im))) re))))
101.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
75.0ms
(/ (* im (* im 2.0)) (- (sqrt (+ (* re re) (* im im))) re))

prune1.3s

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 11.8b

localize22.0ms

Local error

Found 4 expressions with local error:

31.9b
(sqrt (+ (* re re) (* im im)))
31.1b
(sqrt (* im (* im 2.0)))
31.1b
(sqrt (* im (* im 2.0)))
0.4b
(- (sqrt (+ (* re re) (* im im))) re)

rewrite27.0ms

Algorithm
rewrite-expression-head
Counts
4 → 43
Calls

4 calls. Slowest were:

20.0ms
(- (sqrt (+ (* re re) (* im im))) re)
4.0ms
(sqrt (+ (* re re) (* im im)))
1.0ms
(sqrt (* im (* im 2.0)))

series119.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

39.0ms
(- (sqrt (+ (* re re) (* im im))) re)
31.0ms
(sqrt (+ (* re re) (* im im)))
26.0ms
(sqrt (* im (* im 2.0)))
22.0ms
(sqrt (* im (* im 2.0)))

simplify248.0ms

Counts
20 → 55
Calls

20 calls. Slowest were:

134.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
33.0ms
(sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))
18.0ms
(* -1 (* (sqrt 2.0) im))

prune847.0ms

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 11.8b

localize22.0ms

Local error

Found 1 expressions with local error:

0.2b
(sqrt (* 2.0 (+ im re)))

rewrite1.0ms

Algorithm
rewrite-expression-head
Counts
1 → 11
Calls

1 calls. Slowest were:

1.0ms
(sqrt (* 2.0 (+ im re)))

series57.0ms

Counts
1 → 3
Calls

1 calls. Slowest were:

57.0ms
(sqrt (* 2.0 (+ im re)))

simplify229.0ms

Counts
6 → 14
Calls

6 calls. Slowest were:

180.0ms
(sqrt (* 2.0 (- (* im im) (* re re))))
45.0ms
(sqrt (* 2.0 (+ (pow im 3) (pow re 3))))
1.0ms
(sqrt 2.0)

prune108.0ms

Pruning

10 alts after pruning (8 fresh and 2 done)

Merged error: 11.8b

regimes623.0ms

Accuracy

51.5% (13.6b remaining)

Error of 23.3b against oracle of 9.7b and baseline of 37.7b

bsearch1.1s

end0.0ms

sample2.8s

Algorithm
intervals