Average Error: 37.5 → 17.5
Time: 27.8s
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.6958975798724648 \cdot 10^{+132}:\\ \;\;\;\;\left(\sqrt{2.0} \cdot \frac{\left|im\right|}{\sqrt{re \cdot -2}}\right) \cdot 0.5\\ \mathbf{elif}\;re \le -1.0124855282781271 \cdot 10^{-294}:\\ \;\;\;\;\left(\left(\frac{\sqrt{\left|im\right|}}{\frac{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}{\sqrt{\left|im\right|}}} \cdot \sqrt[3]{\sqrt{2.0}}\right) \cdot \left(\sqrt[3]{\sqrt{2.0}} \cdot \sqrt[3]{\sqrt{2.0}}\right)\right) \cdot 0.5\\ \mathbf{elif}\;re \le 8.234804025380906 \cdot 10^{+145}:\\ \;\;\;\;\left(\sqrt{\sqrt{im \cdot im + re \cdot re} + re} \cdot \sqrt{2.0}\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.5
Target32.8
Herbie17.5
\[\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 4 regimes
  2. if re < -1.6958975798724648e+132

    1. Initial program 61.2

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

      \[\leadsto 0.5 \cdot \color{blue}{\left(\sqrt{2.0} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} + re}\right)}\]
    4. Using strategy rm
    5. Applied flip-+61.2

      \[\leadsto 0.5 \cdot \left(\sqrt{2.0} \cdot \sqrt{\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}}}\right)\]
    6. Applied sqrt-div61.2

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

      \[\leadsto 0.5 \cdot \left(\sqrt{2.0} \cdot \frac{\color{blue}{\left|im\right|}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right)\]
    8. Taylor expanded around -inf 9.5

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

    if -1.6958975798724648e+132 < re < -1.0124855282781271e-294

    1. Initial program 38.8

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

      \[\leadsto 0.5 \cdot \color{blue}{\left(\sqrt{2.0} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} + re}\right)}\]
    4. Using strategy rm
    5. Applied flip-+38.9

      \[\leadsto 0.5 \cdot \left(\sqrt{2.0} \cdot \sqrt{\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}}}\right)\]
    6. Applied sqrt-div38.9

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

      \[\leadsto 0.5 \cdot \left(\sqrt{2.0} \cdot \frac{\color{blue}{\left|im\right|}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right)\]
    8. Using strategy rm
    9. Applied add-sqr-sqrt20.7

      \[\leadsto 0.5 \cdot \left(\sqrt{2.0} \cdot \frac{\color{blue}{\sqrt{\left|im\right|} \cdot \sqrt{\left|im\right|}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right)\]
    10. Applied associate-/l*20.6

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

      \[\leadsto 0.5 \cdot \left(\color{blue}{\left(\left(\sqrt[3]{\sqrt{2.0}} \cdot \sqrt[3]{\sqrt{2.0}}\right) \cdot \sqrt[3]{\sqrt{2.0}}\right)} \cdot \frac{\sqrt{\left|im\right|}}{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}{\sqrt{\left|im\right|}}}\right)\]
    13. Applied associate-*l*20.6

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

    if -1.0124855282781271e-294 < re < 8.234804025380906e+145

    1. Initial program 20.4

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

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

    if 8.234804025380906e+145 < re

    1. Initial program 59.4

      \[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 4 regimes into one program.
  4. Final simplification17.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.6958975798724648 \cdot 10^{+132}:\\ \;\;\;\;\left(\sqrt{2.0} \cdot \frac{\left|im\right|}{\sqrt{re \cdot -2}}\right) \cdot 0.5\\ \mathbf{elif}\;re \le -1.0124855282781271 \cdot 10^{-294}:\\ \;\;\;\;\left(\left(\frac{\sqrt{\left|im\right|}}{\frac{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}{\sqrt{\left|im\right|}}} \cdot \sqrt[3]{\sqrt{2.0}}\right) \cdot \left(\sqrt[3]{\sqrt{2.0}} \cdot \sqrt[3]{\sqrt{2.0}}\right)\right) \cdot 0.5\\ \mathbf{elif}\;re \le 8.234804025380906 \cdot 10^{+145}:\\ \;\;\;\;\left(\sqrt{\sqrt{im \cdot im + re \cdot re} + re} \cdot \sqrt{2.0}\right) \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;\sqrt{2.0 \cdot \left(re + re\right)} \cdot 0.5\\ \end{array}\]

Reproduce

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

sample100.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))))

prune29.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 37.0b

localize42.0ms

Local error

Found 4 expressions with local error:

29.0b
(sqrt (+ (* re re) (* im im)))
0.3b
(+ (sqrt (+ (* re re) (* im im))) re)
0.2b
(sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))
0.0b
(+ (* re re) (* im im))

rewrite13.0ms

Algorithm
rewrite-expression-head
Counts
4 → 46
Calls

4 calls. Slowest were:

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

series172.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

99.0ms
(sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))
40.0ms
(+ (sqrt (+ (* re re) (* im im))) re)
19.0ms
(sqrt (+ (* re re) (* im im)))
15.0ms
(+ (* re re) (* im im))

simplify759.0ms

Counts
22 → 58
Calls

22 calls. Slowest were:

267.0ms
(sqrt (* 2.0 (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re))))
174.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
150.0ms
(sqrt (* 2.0 (+ (pow (sqrt (+ (* re re) (* im im))) 3) (pow re 3))))

prune678.0ms

Pruning

7 alts after pruning (6 fresh and 1 done)

Merged error: 16.2b

localize20.0ms

Local error

Found 4 expressions with local error:

29.0b
(sqrt (+ (* re re) (* im im)))
0.3b
(* (sqrt 2.0) (sqrt (+ (sqrt (+ (* re re) (* im im))) re)))
0.3b
(+ (sqrt (+ (* re re) (* im im))) re)
0.0b
(sqrt (+ (sqrt (+ (* re re) (* im im))) re))

rewrite39.0ms

Algorithm
rewrite-expression-head
Counts
4 → 62
Calls

4 calls. Slowest were:

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

series218.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

100.0ms
(* (sqrt 2.0) (sqrt (+ (sqrt (+ (* re re) (* im im))) re)))
60.0ms
(sqrt (+ (sqrt (+ (* re re) (* im im))) re))
33.0ms
(sqrt (+ (* re re) (* im im)))
24.0ms
(+ (sqrt (+ (* re re) (* im im))) re)

simplify1.1s

Counts
39 → 74
Calls

39 calls. Slowest were:

436.0ms
(sqrt (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re)))
151.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
141.0ms
(* (* (* (sqrt 2.0) (sqrt 2.0)) (sqrt 2.0)) (* (* (sqrt (+ (sqrt (+ (* re re) (* im im))) re)) (sqrt (+ (sqrt (+ (* re re) (* im im))) re))) (sqrt (+ (sqrt (+ (* re re) (* im im))) re))))

prune781.0ms

Pruning

8 alts after pruning (6 fresh and 2 done)

Merged error: 13.7b

localize26.0ms

Local error

Found 4 expressions with local error:

29.0b
(sqrt (+ (* re re) (* im im)))
0.8b
(- (sqrt (+ (* re re) (* im im))) re)
0.3b
(/ (fabs im) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))
0.3b
(* (sqrt 2.0) (/ (fabs im) (sqrt (- (sqrt (+ (* re re) (* im im))) re))))

rewrite46.0ms

Algorithm
rewrite-expression-head
Counts
4 → 107
Calls

4 calls. Slowest were:

15.0ms
(* (sqrt 2.0) (/ (fabs im) (sqrt (- (sqrt (+ (* re re) (* im im))) re))))
12.0ms
(/ (fabs im) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))
10.0ms
(- (sqrt (+ (* re re) (* im im))) re)

series267.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

112.0ms
(* (sqrt 2.0) (/ (fabs im) (sqrt (- (sqrt (+ (* re re) (* im im))) re))))
85.0ms
(/ (fabs im) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))
40.0ms
(- (sqrt (+ (* re re) (* im im))) re)
29.0ms
(sqrt (+ (* re re) (* im im)))

simplify2.2s

Counts
98 → 119
Calls

98 calls. Slowest were:

634.0ms
(* (* (* (sqrt 2.0) (sqrt 2.0)) (sqrt 2.0)) (/ (* (* (fabs im) (fabs im)) (fabs im)) (* (* (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))))
206.0ms
(/ (* (* (fabs im) (fabs im)) (fabs im)) (* (* (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) (sqrt (- (sqrt (+ (* re re) (* im im))) re))))
155.0ms
(* (* (* (sqrt 2.0) (sqrt 2.0)) (sqrt 2.0)) (* (* (/ (fabs im) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) (/ (fabs im) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))) (/ (fabs im) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))))

prune1.5s

Pruning

11 alts after pruning (9 fresh and 2 done)

Merged error: 8.1b

localize29.0ms

Local error

Found 4 expressions with local error:

29.0b
(sqrt (+ (* re re) (* im im)))
0.8b
(- (sqrt (+ (* re re) (* im im))) re)
0.3b
(* (sqrt 2.0) (/ (sqrt (fabs im)) (/ (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (fabs im)))))
0.1b
(/ (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (fabs im)))

rewrite118.0ms

Algorithm
rewrite-expression-head
Counts
4 → 353
Calls

4 calls. Slowest were:

37.0ms
(* (sqrt 2.0) (/ (sqrt (fabs im)) (/ (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (fabs im)))))
33.0ms
(/ (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (fabs im)))
20.0ms
(- (sqrt (+ (* re re) (* im im))) re)

series222.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

95.0ms
(* (sqrt 2.0) (/ (sqrt (fabs im)) (/ (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (fabs im)))))
79.0ms
(/ (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (fabs im)))
25.0ms
(sqrt (+ (* re re) (* im im)))
24.0ms
(- (sqrt (+ (* re re) (* im im))) re)

simplify7.9s

Counts
362 → 365
Calls

362 calls. Slowest were:

639.0ms
(* (* (* (sqrt 2.0) (sqrt 2.0)) (sqrt 2.0)) (* (* (/ (sqrt (fabs im)) (/ (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (fabs im)))) (/ (sqrt (fabs im)) (/ (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (fabs im))))) (/ (sqrt (fabs im)) (/ (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (fabs im))))))
428.0ms
(sqrt (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re)))
313.0ms
(/ (* (* (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) (* (* (sqrt (fabs im)) (sqrt (fabs im))) (sqrt (fabs im))))

prune6.1s

Pruning

10 alts after pruning (9 fresh and 1 done)

Merged error: 8.1b

regimes460.0ms

Accuracy

67% (9.7b remaining)

Error of 17.5b against oracle of 7.9b and baseline of 37.1b

bsearch303.0ms

end0.0ms

sample3.2s

Algorithm
intervals