Average Error: 37.7 → 25.8
Time: 14.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 2.1563411591081 \cdot 10^{-310}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot 2.0\right) \cdot im}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\ \mathbf{elif}\;re \le 1.4141127969867808 \cdot 10^{+103}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} + re\right)} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2.0}\\ \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
Target33.0
Herbie25.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 3 regimes
  2. if re < 2.1563411591081e-310

    1. Initial program 44.4

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

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

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

      \[\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. Simplified34.3

      \[\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 2.1563411591081e-310 < re < 1.4141127969867808e+103

    1. Initial program 20.9

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

    if 1.4141127969867808e+103 < re

    1. Initial program 51.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-sqr-sqrt51.1

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le 2.1563411591081 \cdot 10^{-310}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot 2.0\right) \cdot im}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\ \mathbf{elif}\;re \le 1.4141127969867808 \cdot 10^{+103}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} + re\right)} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2.0}\\ \end{array}\]

Reproduce

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

sample84.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: 35.2b

localize57.0ms

Local error

Found 4 expressions with local error:

28.3b
(sqrt (+ (* re re) (* im im)))
0.5b
(+ (sqrt (+ (* re re) (* im im))) re)
0.0b
(+ (* re re) (* im im))
0.0b
(sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))

rewrite14.0ms

Algorithm
rewrite-expression-head
Counts
4 → 46
Calls

4 calls. Slowest were:

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

series180.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

124.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)))
14.0ms
(+ (* re re) (* im im))

simplify659.0ms

Counts
22 → 58
Calls

22 calls. Slowest were:

321.0ms
(sqrt (* 2.0 (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re))))
144.0ms
(sqrt (* 2.0 (+ (pow (sqrt (+ (* re re) (* im im))) 3) (pow re 3))))
115.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune671.0ms

Pruning

6 alts after pruning (5 fresh and 1 done)

Merged error: 17.6b

localize27.0ms

Local error

Found 4 expressions with local error:

28.3b
(sqrt (+ (* re re) (* im im)))
28.3b
(sqrt (+ (* re re) (* im im)))
8.3b
(+ (* (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)))))

rewrite24.0ms

Algorithm
rewrite-expression-head
Counts
4 → 82
Calls

4 calls. Slowest were:

10.0ms
(* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im)))))
8.0ms
(+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re)
2.0ms
(sqrt (+ (* re re) (* im im)))

series483.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

419.0ms
(+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re)
25.0ms
(sqrt (+ (* re re) (* im im)))
21.0ms
(* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im)))))
18.0ms
(sqrt (+ (* re re) (* im im)))

simplify2.0s

Counts
64 → 94
Calls

64 calls. Slowest were:

224.0ms
(* (sqrt (sqrt (- (* re re) (* im im)))) (sqrt (sqrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im)))))))
187.0ms
(* (sqrt (sqrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im)))))) (sqrt (sqrt (- (* re re) (* im im)))))
176.0ms
(* (sqrt (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))) (sqrt (sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))))

prune1.1s

Pruning

8 alts after pruning (7 fresh and 1 done)

Merged error: 17.6b

localize21.0ms

Local error

Found 4 expressions with local error:

28.3b
(sqrt (+ (* re re) (* im im)))
28.3b
(sqrt (+ (* re re) (* im im)))
28.3b
(sqrt (+ (* re re) (* im im)))
9.6b
(+ (* (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (sqrt (+ (* re re) (* im im)))))) (sqrt (sqrt (sqrt (+ (* re re) (* im im)))))) re)

rewrite28.0ms

Algorithm
rewrite-expression-head
Counts
4 → 52
Calls

4 calls. Slowest were:

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

series114.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

40.0ms
(+ (* (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (sqrt (+ (* re re) (* im im)))))) (sqrt (sqrt (sqrt (+ (* re re) (* im im)))))) re)
33.0ms
(sqrt (+ (* re re) (* im im)))
22.0ms
(sqrt (+ (* re re) (* im im)))
19.0ms
(sqrt (+ (* re re) (* im im)))

simplify595.0ms

Counts
30 → 64
Calls

30 calls. Slowest were:

155.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
128.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
109.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune1.1s

Pruning

8 alts after pruning (6 fresh and 2 done)

Merged error: 17.6b

localize14.0ms

Local error

Found 4 expressions with local error:

28.3b
(sqrt (+ (* re re) (* im im)))
28.3b
(sqrt (+ (* re re) (* im im)))
8.3b
(+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re)
4.4b
(exp (log (+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re)))

rewrite50.0ms

Algorithm
rewrite-expression-head
Counts
4 → 55
Calls

4 calls. Slowest were:

26.0ms
(exp (log (+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re)))
15.0ms
(+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re)
4.0ms
(sqrt (+ (* re re) (* im im)))

series142.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

39.0ms
(+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re)
39.0ms
(exp (log (+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re)))
32.0ms
(sqrt (+ (* re re) (* im im)))
31.0ms
(sqrt (+ (* re re) (* im im)))

simplify795.0ms

Counts
34 → 67
Calls

34 calls. Slowest were:

192.0ms
(exp (log (- (* (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im)))))) (* re re))))
174.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
158.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune1.0s

Pruning

11 alts after pruning (9 fresh and 2 done)

Merged error: 17.6b

regimes966.0ms

Accuracy

58.2% (8.5b remaining)

Error of 25.8b against oracle of 17.3b and baseline of 37.7b

bsearch138.0ms

end0.0ms

sample2.8s

Algorithm
intervals