Average Error: 37.8 → 22.9
Time: 13.2s
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 -9.958620725379148 \cdot 10^{+82}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot 2.0\right) \cdot im}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le -6.696946340594285 \cdot 10^{-33}:\\ \;\;\;\;0.5 \cdot \left(\frac{\sqrt{\sqrt[3]{\sqrt{\left(im \cdot 2.0\right) \cdot im}} \cdot \left(\sqrt[3]{\sqrt{\left(im \cdot 2.0\right) \cdot im}} \cdot \sqrt[3]{\sqrt{\left(im \cdot 2.0\right) \cdot im}}\right)}}{\sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}}} \cdot \frac{\sqrt{\sqrt{\left(im \cdot 2.0\right) \cdot im}}}{\left|\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}\right|}\right)\\ \mathbf{elif}\;re \le -1.2374781786568106 \cdot 10^{-129}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + im\right) \cdot 2.0}\\ \mathbf{elif}\;re \le 7.44145532907071 \cdot 10^{+95}:\\ \;\;\;\;\sqrt{\left(\sqrt{re \cdot re + im \cdot im} + re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + re\right)}\\ \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.8
Target32.8
Herbie22.9
\[\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 5 regimes
  2. if re < -9.958620725379148e+82

    1. Initial program 59.1

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

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

      \[\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.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. Simplified41.2

      \[\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 21.5

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

    if -9.958620725379148e+82 < re < -6.696946340594285e-33

    1. Initial program 46.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-+46.1

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

      \[\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-div46.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. Simplified28.2

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

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

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

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

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

      \[\leadsto 0.5 \cdot \left(\color{blue}{\frac{\sqrt{\sqrt{im \cdot \left(im \cdot 2.0\right)}}}{\left|\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}\right|}} \cdot \frac{\sqrt{\sqrt{im \cdot \left(im \cdot 2.0\right)}}}{\sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}}}\right)\]
    13. Using strategy rm
    14. Applied add-cube-cbrt28.6

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

    if -6.696946340594285e-33 < re < -1.2374781786568106e-129

    1. Initial program 36.8

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

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

    if -1.2374781786568106e-129 < re < 7.44145532907071e+95

    1. Initial program 23.4

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

    if 7.44145532907071e+95 < re

    1. Initial program 49.8

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -9.958620725379148 \cdot 10^{+82}:\\ \;\;\;\;\frac{\sqrt{\left(im \cdot 2.0\right) \cdot im}}{\sqrt{-2 \cdot re}} \cdot 0.5\\ \mathbf{elif}\;re \le -6.696946340594285 \cdot 10^{-33}:\\ \;\;\;\;0.5 \cdot \left(\frac{\sqrt{\sqrt[3]{\sqrt{\left(im \cdot 2.0\right) \cdot im}} \cdot \left(\sqrt[3]{\sqrt{\left(im \cdot 2.0\right) \cdot im}} \cdot \sqrt[3]{\sqrt{\left(im \cdot 2.0\right) \cdot im}}\right)}}{\sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}}} \cdot \frac{\sqrt{\sqrt{\left(im \cdot 2.0\right) \cdot im}}}{\left|\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}\right|}\right)\\ \mathbf{elif}\;re \le -1.2374781786568106 \cdot 10^{-129}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(re + im\right) \cdot 2.0}\\ \mathbf{elif}\;re \le 7.44145532907071 \cdot 10^{+95}:\\ \;\;\;\;\sqrt{\left(\sqrt{re \cdot re + im \cdot im} + re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + re\right)}\\ \end{array}\]

Reproduce

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

sample88.0ms

Algorithm
intervals
Results
256×(pre true 80)
173×(body real 80)
22×(body real 5120)
21×(body real 1280)
20×(body real 2560)
10×(body real 640)
(body real 160)
(body real 320)

simplify17.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
17.0ms
(* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))))

prune13.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 40.4b

localize44.0ms

Local error

Found 3 expressions with local error:

31.4b
(sqrt (+ (* re re) (* im im)))
1.5b
(+ (sqrt (+ (* re re) (* im im))) re)
0.0b
(sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))

rewrite22.0ms

Algorithm
rewrite-expression-head
Rules
add-sqr-sqrt
sqrt-prod
add-cube-cbrt
sqrt-div
*-un-lft-identity
add-log-exp
flip-+
add-exp-log
add-cbrt-cube
flip3-+
pow1
associate-*r/
pow1/2
rem-sqrt-square
+-commutative
Counts
3 → 35
Calls
3 calls:
Slowest
15.0ms
(+ (sqrt (+ (* re re) (* im im))) re)
4.0ms
(sqrt (+ (* re re) (* im im)))
3.0ms
(sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))

series206.0ms

Counts
3 → 9
Calls
3 calls:
Slowest
129.0ms
(sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))
46.0ms
(+ (sqrt (+ (* re re) (* im im))) re)
31.0ms
(sqrt (+ (* re re) (* im im)))

simplify741.0ms

Counts
18 → 44
Calls
18 calls:
Slowest
338.0ms
(sqrt (* 2.0 (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re))))
177.0ms
(sqrt (* 2.0 (+ (pow (sqrt (+ (* re re) (* im im))) 3) (pow re 3))))
153.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
45.0ms
(sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))
6.0ms
(sqrt (* (cbrt (+ (* re re) (* im im))) (cbrt (+ (* re re) (* im im)))))

prune456.0ms

Pruning

6 alts after pruning (5 fresh and 1 done)

Merged error: 20.1b

localize19.0ms

Local error

Found 4 expressions with local error:

32.0b
(sqrt (* im (* im 2.0)))
31.4b
(sqrt (+ (* re re) (* im im)))
0.5b
(- (sqrt (+ (* re re) (* im im))) re)
0.3b
(/ (sqrt (* im (* im 2.0))) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))

rewrite47.0ms

Algorithm
rewrite-expression-head
Rules
26×sqrt-prod
24×times-frac
23×add-sqr-sqrt
22×add-cube-cbrt
22×*-un-lft-identity
add-exp-log
add-cbrt-cube
associate-/r*
add-log-exp
associate-/l*
sqrt-div
pow1
flip--
associate-/r/
pow1/2
flip3--
div-inv
flip-+
div-exp
flip3-+
frac-2neg
sub-neg
clear-num
sqrt-undiv
rem-sqrt-square
cbrt-undiv
Counts
4 → 83
Calls
4 calls:
Slowest
24.0ms
(/ (sqrt (* im (* im 2.0))) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))
14.0ms
(- (sqrt (+ (* re re) (* im im))) re)
2.0ms
(sqrt (+ (* re re) (* im im)))
1.0ms
(sqrt (* im (* im 2.0)))

series189.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
109.0ms
(/ (sqrt (* im (* im 2.0))) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))
33.0ms
(- (sqrt (+ (* re re) (* im im))) re)
28.0ms
(sqrt (* im (* im 2.0)))
18.0ms
(sqrt (+ (* re re) (* im im)))

simplify1.3s

Counts
81 → 95
Calls
81 calls:
Slowest
211.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))))
142.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
58.0ms
(sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))
46.0ms
(/ (* (cbrt (sqrt (* im (* im 2.0)))) (cbrt (sqrt (* im (* im 2.0))))) (* (cbrt (sqrt (- (sqrt (+ (* re re) (* im im))) re))) (cbrt (sqrt (- (sqrt (+ (* re re) (* im im))) re)))))
38.0ms
(/ (* im (* im 2.0)) (- (sqrt (+ (* re re) (* im im))) re))

prune1.2s

Pruning

13 alts after pruning (12 fresh and 1 done)

Merged error: 12.4b

localize14.0ms

Local error

Found 4 expressions with local error:

32.0b
(sqrt (* im (* im 2.0)))
32.0b
(sqrt (* im (* im 2.0)))
31.4b
(sqrt (+ (* re re) (* im im)))
0.5b
(- (sqrt (+ (* re re) (* im im))) re)

rewrite20.0ms

Algorithm
rewrite-expression-head
Rules
add-sqr-sqrt
sqrt-prod
add-cube-cbrt
*-un-lft-identity
add-log-exp
add-exp-log
add-cbrt-cube
pow1
pow1/2
sqrt-div
flip--
flip-+
flip3--
flip3-+
sub-neg
rem-sqrt-square
Counts
4 → 43
Calls
4 calls:
Slowest
17.0ms
(- (sqrt (+ (* re re) (* im im))) re)
2.0ms
(sqrt (+ (* re re) (* im im)))
1.0ms
(sqrt (* im (* im 2.0)))
0.0ms
(sqrt (* im (* im 2.0)))

series104.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
38.0ms
(- (sqrt (+ (* re re) (* im im))) re)
27.0ms
(sqrt (* im (* im 2.0)))
20.0ms
(sqrt (* im (* im 2.0)))
18.0ms
(sqrt (+ (* re re) (* im im)))

simplify268.0ms

Counts
20 → 55
Calls
20 calls:
Slowest
137.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
55.0ms
(sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))
17.0ms
(* -1 (* (sqrt 2.0) im))
16.0ms
(* -1 (* (sqrt 2.0) im))
5.0ms
(sqrt (* (cbrt (+ (* re re) (* im im))) (cbrt (+ (* re re) (* im im)))))

prune757.0ms

Pruning

13 alts after pruning (12 fresh and 1 done)

Merged error: 12.3b

localize27.0ms

Local error

Found 4 expressions with local error:

32.0b
(sqrt (* im (* im 2.0)))
32.0b
(sqrt (* im (* im 2.0)))
31.4b
(sqrt (+ (* re re) (* im im)))
31.4b
(sqrt (+ (* re re) (* im im)))

rewrite10.0ms

Algorithm
rewrite-expression-head
Rules
sqrt-prod
add-sqr-sqrt
add-cube-cbrt
*-un-lft-identity
add-log-exp
add-exp-log
sqrt-div
pow1/2
add-cbrt-cube
pow1
flip-+
flip3-+
rem-sqrt-square
Counts
4 → 46
Calls
4 calls:
Slowest
4.0ms
(sqrt (+ (* re re) (* im im)))
3.0ms
(sqrt (+ (* re re) (* im im)))
1.0ms
(sqrt (* im (* im 2.0)))
1.0ms
(sqrt (* im (* im 2.0)))

series86.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
25.0ms
(sqrt (+ (* re re) (* im im)))
21.0ms
(sqrt (* im (* im 2.0)))
21.0ms
(sqrt (* im (* im 2.0)))
19.0ms
(sqrt (+ (* re re) (* im im)))

simplify473.0ms

Counts
26 → 58
Calls
26 calls:
Slowest
172.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
124.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
63.0ms
(sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))
41.0ms
(sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))
16.0ms
(* -1 (* (sqrt 2.0) im))

prune1.0s

Pruning

12 alts after pruning (11 fresh and 1 done)

Merged error: 12.3b

regimes972.0ms

Accuracy

57% (13.1b remaining)

Error of 22.9b against oracle of 9.9b and baseline of 40.3b

bsearch339.0ms

end0.0ms

sample3.1s

Algorithm
intervals
Results
8000×(pre true 80)
5986×(body real 80)
699×(body real 2560)
468×(body real 1280)
333×(body real 5120)
267×(body real 640)
159×(body real 320)
88×(body real 160)