Average Error: 37.7 → 10.9
Time: 13.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 -1.5017772580859914 \cdot 10^{+163}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2.0} \cdot im}{\sqrt{\sqrt{re^2 + im^2}^* - re}}\\ \mathbf{elif}\;re \le -3.548982894061317 \cdot 10^{+91}:\\ \;\;\;\;\left(-0.5\right) \cdot \frac{\sqrt{2.0} \cdot im}{\sqrt{\sqrt{re^2 + im^2}^* - re}}\\ \mathbf{elif}\;re \le -2.1409451102557175 \cdot 10^{+42}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{im \cdot 2.0}}{\frac{\sqrt{\sqrt{re^2 + im^2}^* - re}}{\sqrt{im}}}\\ \mathbf{elif}\;re \le -6.350457181455309 \cdot 10^{-35}:\\ \;\;\;\;\left(-0.5\right) \cdot \frac{\sqrt{2.0} \cdot im}{\sqrt{\sqrt{re^2 + im^2}^* - re}}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{(\left(\sqrt{re^2 + im^2}^*\right) \cdot 2.0 + \left(2.0 \cdot re\right))_*}\\ \end{array}\]

Error

Bits error versus re

Bits error versus im

Target

Original37.7
Target32.8
Herbie10.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 4 regimes
  2. if re < -1.5017772580859914e+163

    1. Initial program 62.3

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

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

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

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

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

      \[\leadsto 0.5 \cdot \frac{\sqrt{\left(im \cdot 2.0\right) \cdot im}}{\sqrt{\color{blue}{\sqrt{re^2 + im^2}^*} - re}}\]
    9. Taylor expanded around inf 26.9

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{2.0} \cdot im}}{\sqrt{\sqrt{re^2 + im^2}^* - re}}\]

    if -1.5017772580859914e+163 < re < -3.548982894061317e+91 or -2.1409451102557175e+42 < re < -6.350457181455309e-35

    1. Initial program 50.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-+50.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/50.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-div50.2

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

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{\left(im \cdot 2.0\right) \cdot im}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\]
    7. Using strategy rm
    8. Applied hypot-def28.0

      \[\leadsto 0.5 \cdot \frac{\sqrt{\left(im \cdot 2.0\right) \cdot im}}{\sqrt{\color{blue}{\sqrt{re^2 + im^2}^*} - re}}\]
    9. Taylor expanded around -inf 30.8

      \[\leadsto 0.5 \cdot \frac{\color{blue}{-1 \cdot \left(\sqrt{2.0} \cdot im\right)}}{\sqrt{\sqrt{re^2 + im^2}^* - re}}\]
    10. Simplified30.8

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

    if -3.548982894061317e+91 < re < -2.1409451102557175e+42

    1. Initial program 49.8

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

      \[\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/50.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-div50.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. Simplified25.7

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

      \[\leadsto 0.5 \cdot \frac{\sqrt{\left(im \cdot 2.0\right) \cdot im}}{\sqrt{\color{blue}{\sqrt{re^2 + im^2}^*} - re}}\]
    9. Using strategy rm
    10. Applied sqrt-prod29.7

      \[\leadsto 0.5 \cdot \frac{\color{blue}{\sqrt{im \cdot 2.0} \cdot \sqrt{im}}}{\sqrt{\sqrt{re^2 + im^2}^* - re}}\]
    11. Applied associate-/l*29.7

      \[\leadsto 0.5 \cdot \color{blue}{\frac{\sqrt{im \cdot 2.0}}{\frac{\sqrt{\sqrt{re^2 + im^2}^* - re}}{\sqrt{im}}}}\]

    if -6.350457181455309e-35 < re

    1. Initial program 30.9

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

      \[\leadsto \color{blue}{0.5 \cdot \sqrt{(\left(\sqrt{re^2 + im^2}^*\right) \cdot 2.0 + \left(re \cdot 2.0\right))_*}}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification10.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.5017772580859914 \cdot 10^{+163}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{2.0} \cdot im}{\sqrt{\sqrt{re^2 + im^2}^* - re}}\\ \mathbf{elif}\;re \le -3.548982894061317 \cdot 10^{+91}:\\ \;\;\;\;\left(-0.5\right) \cdot \frac{\sqrt{2.0} \cdot im}{\sqrt{\sqrt{re^2 + im^2}^* - re}}\\ \mathbf{elif}\;re \le -2.1409451102557175 \cdot 10^{+42}:\\ \;\;\;\;0.5 \cdot \frac{\sqrt{im \cdot 2.0}}{\frac{\sqrt{\sqrt{re^2 + im^2}^* - re}}{\sqrt{im}}}\\ \mathbf{elif}\;re \le -6.350457181455309 \cdot 10^{-35}:\\ \;\;\;\;\left(-0.5\right) \cdot \frac{\sqrt{2.0} \cdot im}{\sqrt{\sqrt{re^2 + im^2}^* - re}}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{(\left(\sqrt{re^2 + im^2}^*\right) \cdot 2.0 + \left(2.0 \cdot re\right))_*}\\ \end{array}\]

Reproduce

herbie shell --seed 2019004 +o rules:numerics
(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: 12.4s)Debug log

sample84.0ms

Algorithm
intervals

simplify36.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

35.0ms
(* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))))

prune19.0ms

Pruning

2 alts after pruning (2 fresh and 0 done)

Merged error: 15.7b

localize15.0ms

Local error

Found 2 expressions with local error:

1.0b
(fma (hypot re im) 2.0 (* re 2.0))
0.2b
(sqrt (fma (hypot re im) 2.0 (* re 2.0)))

rewrite1.0ms

Algorithm
rewrite-expression-head
Counts
2 → 24
Calls

2 calls. Slowest were:

1.0ms
(sqrt (fma (hypot re im) 2.0 (* re 2.0)))
0.0ms
(fma (hypot re im) 2.0 (* re 2.0))

series200.0ms

Counts
2 → 6
Calls

2 calls. Slowest were:

162.0ms
(sqrt (fma (hypot re im) 2.0 (* re 2.0)))
38.0ms
(fma (hypot re im) 2.0 (* re 2.0))

simplify61.0ms

Counts
10 → 30
Calls

10 calls. Slowest were:

19.0ms
(sqrt (sqrt (fma (hypot re im) 2.0 (* re 2.0))))
19.0ms
(sqrt (* (cbrt (fma (hypot re im) 2.0 (* re 2.0))) (cbrt (fma (hypot re im) 2.0 (* re 2.0)))))
11.0ms
(sqrt (fma (hypot re im) 2.0 (* re 2.0)))

prune262.0ms

Pruning

3 alts after pruning (2 fresh and 1 done)

Merged error: 15.7b

localize27.0ms

Local error

Found 3 expressions with local error:

31.9b
(sqrt (+ (* re re) (* im im)))
1.0b
(+ (sqrt (+ (* re re) (* im im))) re)
0.2b
(sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))

rewrite23.0ms

Algorithm
rewrite-expression-head
Counts
3 → 48
Calls

3 calls. Slowest were:

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

series171.0ms

Counts
3 → 9
Calls

3 calls. Slowest were:

106.0ms
(sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))
35.0ms
(+ (sqrt (+ (* re re) (* im im))) re)
29.0ms
(sqrt (+ (* re re) (* im im)))

simplify864.0ms

Counts
23 → 57
Calls

23 calls. Slowest were:

325.0ms
(sqrt (* 2.0 (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re))))
259.0ms
(sqrt (* 2.0 (+ (pow (sqrt (+ (* re re) (* im im))) 3) (pow re 3))))
160.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune673.0ms

Pruning

3 alts after pruning (2 fresh and 1 done)

Merged error: 11.7b

localize18.0ms

Local error

Found 4 expressions with local error:

31.9b
(sqrt (+ (* re re) (* im im)))
31.1b
(sqrt (* (* im 2.0) im))
0.4b
(- (sqrt (+ (* re re) (* im im))) re)
0.3b
(/ (sqrt (* (* im 2.0) im)) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))

rewrite33.0ms

Algorithm
rewrite-expression-head
Counts
4 → 98
Calls

4 calls. Slowest were:

15.0ms
(- (sqrt (+ (* re re) (* im im))) re)
13.0ms
(/ (sqrt (* (* im 2.0) im)) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))
2.0ms
(sqrt (+ (* re re) (* im im)))

series207.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

123.0ms
(/ (sqrt (* (* im 2.0) im)) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))
40.0ms
(- (sqrt (+ (* re re) (* im im))) re)
25.0ms
(sqrt (* (* im 2.0) im))
19.0ms
(sqrt (+ (* re re) (* im im)))

simplify1.4s

Counts
86 → 110
Calls

86 calls. Slowest were:

170.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
168.0ms
(/ (* (* (sqrt (* (* im 2.0) im)) (sqrt (* (* im 2.0) im))) (sqrt (* (* im 2.0) im))) (* (* (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) (sqrt (- (sqrt (+ (* re re) (* im im))) re))))
100.0ms
(sqrt (+ (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (+ (* re re) (* (sqrt (+ (* re re) (* im im))) re))))

prune1.5s

Pruning

10 alts after pruning (9 fresh and 1 done)

Merged error: 0.9b

localize13.0ms

Local error

Found 4 expressions with local error:

31.1b
(sqrt (* (* im 2.0) im))
0.4b
(- (hypot re im) re)
0.3b
(/ (sqrt (* (* im 2.0) im)) (sqrt (- (hypot re im) re)))
0.0b
(* 0.5 (/ (sqrt (* (* im 2.0) im)) (sqrt (- (hypot re im) re))))

rewrite18.0ms

Algorithm
rewrite-expression-head
Counts
4 → 119
Calls

4 calls. Slowest were:

7.0ms
(/ (sqrt (* (* im 2.0) im)) (sqrt (- (hypot re im) re)))
5.0ms
(* 0.5 (/ (sqrt (* (* im 2.0) im)) (sqrt (- (hypot re im) re))))
3.0ms
(- (hypot re im) re)

series359.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

143.0ms
(* 0.5 (/ (sqrt (* (* im 2.0) im)) (sqrt (- (hypot re im) re))))
138.0ms
(/ (sqrt (* (* im 2.0) im)) (sqrt (- (hypot re im) re)))
47.0ms
(- (hypot re im) re)
31.0ms
(sqrt (* (* im 2.0) im))

simplify1.3s

Counts
108 → 131
Calls

108 calls. Slowest were:

164.0ms
(/ (* (* (sqrt (* (* im 2.0) im)) (sqrt (* (* im 2.0) im))) (sqrt (* (* im 2.0) im))) (* (* (sqrt (- (hypot re im) re)) (sqrt (- (hypot re im) re))) (sqrt (- (hypot re im) re))))
40.0ms
(/ (* (* im 2.0) im) (- (hypot re im) re))
35.0ms
(sqrt (+ (* (hypot re im) (hypot re im)) (+ (* re re) (* (hypot re im) re))))

prune1.4s

Pruning

9 alts after pruning (7 fresh and 2 done)

Merged error: 0.0b

regimes214.0ms

Accuracy

18.7% (10.9b remaining)

Error of 10.9b against oracle of 0.1b and baseline of 13.4b

bsearch392.0ms

end0.0ms

sample3.1s

Algorithm
intervals