Average Error: 37.1 → 29.1
Time: 15.5s
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 -3.072948457624708 \cdot 10^{+173}:\\ \;\;\;\;0\\ \mathbf{elif}\;re \le 3.683180931977577 \cdot 10^{+132}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{im \cdot im + re \cdot re} + re\right) \cdot 2.0}\\ \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.1
Target32.4
Herbie29.1
\[\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 < -3.072948457624708e+173

    1. Initial program 62.3

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

      \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \color{blue}{0}}\]

    if -3.072948457624708e+173 < re < 3.683180931977577e+132

    1. Initial program 30.2

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

    if 3.683180931977577e+132 < re

    1. Initial program 55.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 \left(\color{blue}{re} + re\right)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification29.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -3.072948457624708 \cdot 10^{+173}:\\ \;\;\;\;0\\ \mathbf{elif}\;re \le 3.683180931977577 \cdot 10^{+132}:\\ \;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{im \cdot im + re \cdot re} + re\right) \cdot 2.0}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + re\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2019021 
(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.7s)Debug log

sample110.0ms

Algorithm
intervals
Results
23.0ms174×body80valid
22.0ms27×body2560valid
18.0msbody320valid
16.0ms15×body5120valid
12.0ms18×body1280valid
6.0ms10×body640valid
1.0msbody160valid

simplify17.0ms

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

localize41.0ms

Local error

Found 3 expressions with local error:

27.4b
(sqrt (+ (* re re) (* im im)))
1.7b
(+ (sqrt (+ (* re re) (* im im))) re)
0.0b
(+ (* re re) (* im im))

rewrite22.0ms

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

series80.0ms

Counts
3 → 9
Calls
3 calls:
Slowest
31.0ms
(sqrt (+ (* re re) (* im im)))
27.0ms
(+ (sqrt (+ (* re re) (* im im))) re)
22.0ms
(+ (* re re) (* im im))

simplify176.0ms

Counts
16 → 44
Calls
16 calls:
Slowest
117.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
32.0ms
(sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))
5.0ms
(* (exp (* re re)) (exp (* im im)))
3.0ms
(sqrt (* (cbrt (+ (* re re) (* im im))) (cbrt (+ (* re re) (* im im)))))
2.0ms
(sqrt (sqrt (+ (* re re) (* im im))))

prune482.0ms

Pruning

11 alts after pruning (10 fresh and 1 done)

Merged error: 23.1b

localize21.0ms

Local error

Found 4 expressions with local error:

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

rewrite15.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-+
flip3-+
associate-*l*
associate-*r/
sqrt-div
pow1/3
cbrt-unprod
*-commutative
prod-exp
pow-prod-down
+-commutative
Counts
4 → 61
Calls
4 calls:
Slowest
6.0ms
(* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im)))))
5.0ms
(+ (* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im))))) re)
1.0ms
(cbrt (+ (* re re) (* im im)))
1.0ms
(cbrt (+ (* re re) (* im im)))

series399.0ms

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

simplify1.3s

Counts
38 → 73
Calls
38 calls:
Slowest
197.0ms
(+ re (+ (* (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)))))
175.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))))
156.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
147.0ms
(sqrt (cbrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im))))))
118.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune986.0ms

Pruning

12 alts after pruning (11 fresh and 1 done)

Merged error: 23.1b

localize30.0ms

Local error

Found 4 expressions with local error:

28.3b
(cbrt (+ (* re re) (* im im)))
27.4b
(sqrt (+ (* re re) (* im im)))
27.4b
(sqrt (+ (* re re) (* im im)))
12.1b
(+ (* (* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (sqrt (+ (* re re) (* im im)))))) (sqrt (cbrt (sqrt (+ (* re re) (* im im)))))) re)

rewrite41.0ms

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

series254.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
115.0ms
(cbrt (+ (* re re) (* im im)))
92.0ms
(+ (* (* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (sqrt (+ (* re re) (* im im)))))) (sqrt (cbrt (sqrt (+ (* re re) (* im im)))))) re)
28.0ms
(sqrt (+ (* re re) (* im im)))
19.0ms
(sqrt (+ (* re re) (* im im)))

simplify806.0ms

Counts
29 → 63
Calls
29 calls:
Slowest
241.0ms
(+ re (+ (* (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)))))
133.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
117.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
113.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
53.0ms
(cbrt (+ (pow (* re re) 3) (pow (* im im) 3)))

prune1.2s

Pruning

13 alts after pruning (12 fresh and 1 done)

Merged error: 23.1b

localize16.0ms

Local error

Found 4 expressions with local error:

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

rewrite29.0ms

Algorithm
rewrite-expression-head
Rules
28×sqrt-div
24×sqrt-prod
14×add-sqr-sqrt
12×add-cube-cbrt
12×*-un-lft-identity
flip-+
associate-*l*
associate-*r*
flip3-+
pow1
add-exp-log
pow1/2
add-cbrt-cube
add-log-exp
frac-times
pow-prod-up
associate-*r/
associate-*l/
pow-prod-down
rem-sqrt-square
cbrt-unprod
*-commutative
prod-exp
sqrt-unprod
pow-plus
rem-square-sqrt
+-commutative
pow2
Counts
4 → 82
Calls
4 calls:
Slowest
13.0ms
(* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im)))))
11.0ms
(+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re)
2.0ms
(sqrt (+ (* re re) (* im im)))
2.0ms
(sqrt (+ (* re re) (* im im)))

series94.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
29.0ms
(+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re)
26.0ms
(sqrt (+ (* re re) (* im im)))
20.0ms
(* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im)))))
19.0ms
(sqrt (+ (* re re) (* im im)))

simplify2.2s

Counts
64 → 94
Calls
64 calls:
Slowest
224.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)))))))
211.0ms
(* (sqrt (sqrt (- (* re re) (* im im)))) (sqrt (sqrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im)))))))
169.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
164.0ms
(* (sqrt (sqrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im)))))) (sqrt (sqrt (- (* re re) (* im im)))))
158.0ms
(sqrt (sqrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im))))))

prune1.2s

Pruning

15 alts after pruning (13 fresh and 2 done)

Merged error: 23.1b

regimes1.2s

Accuracy

48.1% (8.7b remaining)

Error of 29.1b against oracle of 20.4b and baseline of 37.1b

bsearch184.0ms

end0.0ms

sample2.8s

Algorithm
intervals
Results
861.0ms6032×body80valid
801.0ms480×body1280valid
657.0ms686×body2560valid
248.0ms295×body5120valid
130.0ms276×body640valid
53.0ms149×body320valid
18.0ms82×body160valid