Average Error: 37.2 → 22.7
Time: 14.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 -7.61821412696286 \cdot 10^{+150}:\\ \;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le -5.536443801166738 \cdot 10^{-261}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}\\ \mathbf{elif}\;re \le 7.690525860988237 \cdot 10^{-48}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\ \mathbf{elif}\;re \le 1.600158099397074 \cdot 10^{+147}:\\ \;\;\;\;0.5 \cdot \frac{1}{\frac{\sqrt{\sqrt{im \cdot im + re \cdot re} + re}}{\sqrt{im \cdot \left(2.0 \cdot im\right)}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sqrt{im \cdot \left(2.0 \cdot im\right)}}{\sqrt{re + 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

Derivation

  1. Split input into 5 regimes
  2. if re < -7.61821412696286e+150

    1. Initial program 60.6

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

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

    if -7.61821412696286e+150 < re < -5.536443801166738e-261

    1. Initial program 18.1

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

    if -5.536443801166738e-261 < re < 7.690525860988237e-48

    1. Initial program 31.9

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

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

    if 7.690525860988237e-48 < re < 1.600158099397074e+147

    1. Initial program 46.6

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

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

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

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

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

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

    if 1.600158099397074e+147 < re

    1. Initial program 62.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--62.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/62.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-div62.0

      \[\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. Simplified49.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 19.6

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -7.61821412696286 \cdot 10^{+150}:\\ \;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\ \mathbf{elif}\;re \le -5.536443801166738 \cdot 10^{-261}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}\\ \mathbf{elif}\;re \le 7.690525860988237 \cdot 10^{-48}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\ \mathbf{elif}\;re \le 1.600158099397074 \cdot 10^{+147}:\\ \;\;\;\;0.5 \cdot \frac{1}{\frac{\sqrt{\sqrt{im \cdot im + re \cdot re} + re}}{\sqrt{im \cdot \left(2.0 \cdot im\right)}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sqrt{im \cdot \left(2.0 \cdot im\right)}}{\sqrt{re + re}} \cdot 0.5\\ \end{array}\]

Reproduce

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

sample207.0ms

Algorithm
intervals
Results
62.0ms12×body5120valid
30.0ms188×body80valid
18.0ms21×body2560valid
16.0ms21×body1280valid
4.0msbody640valid
2.0msbody320valid
1.0msbody160valid

simplify37.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
36.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: 38.9b

localize46.0ms

Local error

Found 4 expressions with local error:

31.0b
(sqrt (+ (* re re) (* im im)))
0.6b
(- (sqrt (+ (* re re) (* im im))) re)
0.0b
(+ (* re re) (* im im))
0.0b
(sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))

rewrite35.0ms

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

series208.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
105.0ms
(sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))
39.0ms
(sqrt (+ (* re re) (* im im)))
35.0ms
(+ (* re re) (* im im))
28.0ms
(- (sqrt (+ (* re re) (* im im))) re)

simplify1.2s

Counts
22 → 59
Calls
22 calls:
Slowest
413.0ms
(sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))
357.0ms
(sqrt (* 2.0 (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re))))
214.0ms
(sqrt (* 2.0 (- (pow (sqrt (+ (* re re) (* im im))) 3) (pow re 3))))
118.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
5.0ms
(sqrt (* (cbrt (+ (* re re) (* im im))) (cbrt (+ (* re re) (* im im)))))

prune569.0ms

Pruning

6 alts after pruning (5 fresh and 1 done)

Merged error: 17.2b

localize34.0ms

Local error

Found 4 expressions with local error:

31.9b
(cbrt (+ (* re re) (* im im)))
31.9b
(cbrt (+ (* re re) (* im im)))
6.7b
(- (* (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)))))

rewrite28.0ms

Algorithm
rewrite-expression-head
Rules
10×add-cube-cbrt
10×*-un-lft-identity
10×add-sqr-sqrt
associate-*r*
cbrt-prod
sqrt-prod
add-exp-log
add-cbrt-cube
cbrt-div
pow1
add-log-exp
flip-+
associate-*l*
flip3-+
associate-*r/
sqrt-div
pow1/3
flip--
cbrt-unprod
*-commutative
prod-exp
pow-prod-down
flip3--
sub-neg
Counts
4 → 62
Calls
4 calls:
Slowest
12.0ms
(- (* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im))))) re)
11.0ms
(* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im)))))
2.0ms
(cbrt (+ (* re re) (* im im)))
2.0ms
(cbrt (+ (* re re) (* im im)))

series456.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
129.0ms
(* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im)))))
115.0ms
(cbrt (+ (* re re) (* im im)))
108.0ms
(cbrt (+ (* re re) (* im im)))
103.0ms
(- (* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im))))) re)

simplify1.2s

Counts
38 → 74
Calls
38 calls:
Slowest
206.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)
164.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))))
135.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
120.0ms
(sqrt (cbrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im))))))
120.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune966.0ms

Pruning

7 alts after pruning (6 fresh and 1 done)

Merged error: 17.2b

localize32.0ms

Local error

Found 4 expressions with local error:

31.9b
(cbrt (+ (* re re) (* im im)))
31.9b
(cbrt (+ (* re re) (* im im)))
31.9b
(cbrt (+ (* re re) (* im im)))
31.9b
(cbrt (+ (* re re) (* im im)))

rewrite8.0ms

Algorithm
rewrite-expression-head
Rules
12×cbrt-prod
add-cube-cbrt
*-un-lft-identity
cbrt-div
add-sqr-sqrt
add-log-exp
flip-+
add-exp-log
pow1/3
add-cbrt-cube
flip3-+
pow1
Counts
4 → 52
Calls
4 calls:
Slowest
2.0ms
(cbrt (+ (* re re) (* im im)))
2.0ms
(cbrt (+ (* re re) (* im im)))
1.0ms
(cbrt (+ (* re re) (* im im)))
1.0ms
(cbrt (+ (* re re) (* im im)))

series407.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
120.0ms
(cbrt (+ (* re re) (* im im)))
102.0ms
(cbrt (+ (* re re) (* im im)))
99.0ms
(cbrt (+ (* re re) (* im im)))
86.0ms
(cbrt (+ (* re re) (* im im)))

simplify836.0ms

Counts
32 → 64
Calls
32 calls:
Slowest
134.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
133.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
107.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
105.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
59.0ms
(cbrt (+ (pow (* re re) 3) (pow (* im im) 3)))

prune1.2s

Pruning

7 alts after pruning (5 fresh and 2 done)

Merged error: 17.2b

localize16.0ms

Local error

Found 4 expressions with local error:

31.0b
(sqrt (+ (* re re) (* im im)))
28.8b
(sqrt (* im (* im 2.0)))
1.8b
(+ (sqrt (+ (* re re) (* im im))) re)
0.3b
(/ (sqrt (* im (* im 2.0))) (sqrt (+ (sqrt (+ (* re re) (* im im))) re)))

rewrite25.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-+
flip3-+
associate-/r/
pow1/2
div-inv
div-exp
frac-2neg
clear-num
sqrt-undiv
rem-sqrt-square
+-commutative
cbrt-undiv
Counts
4 → 82
Calls
4 calls:
Slowest
11.0ms
(/ (sqrt (* im (* im 2.0))) (sqrt (+ (sqrt (+ (* re re) (* im im))) re)))
10.0ms
(+ (sqrt (+ (* re re) (* im im))) re)
2.0ms
(sqrt (+ (* re re) (* im im)))
1.0ms
(sqrt (* im (* im 2.0)))

series206.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
112.0ms
(/ (sqrt (* im (* im 2.0))) (sqrt (+ (sqrt (+ (* re re) (* im im))) re)))
38.0ms
(+ (sqrt (+ (* re re) (* im im))) re)
32.0ms
(sqrt (* im (* im 2.0)))
24.0ms
(sqrt (+ (* re re) (* im im)))

simplify1.1s

Counts
81 → 94
Calls
81 calls:
Slowest
183.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))))
167.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
157.0ms
(sqrt (+ (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (- (* re re) (* (sqrt (+ (* re re) (* im im))) re))))
61.0ms
(sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))
51.0ms
(/ (* im (* im 2.0)) (+ (sqrt (+ (* re re) (* im im))) re))

prune1.0s

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 10.0b

regimes650.0ms

Accuracy

53.2% (12.7b remaining)

Error of 22.7b against oracle of 10.0b and baseline of 37.2b

bsearch372.0ms

end0.0ms

sample2.9s

Algorithm
intervals
Results
1.0s6069×body80valid
687.0ms468×body1280valid
532.0ms685×body2560valid
273.0ms301×body5120valid
127.0ms275×body640valid
47.0ms138×body320valid
42.0ms64×body160valid