



Bits error versus re




Bits error versus im
Results
| Original | 37.7 |
|---|---|
| Target | 32.8 |
| Herbie | 23.3 |
if re < -1.0623581109672193e+112Initial program 59.8
rmApplied flip-+59.8
Applied associate-*r/59.8
Applied sqrt-div59.8
Simplified43.5
Taylor expanded around -inf 18.9
if -1.0623581109672193e+112 < re < -1.8516230029597217e-61Initial program 48.0
rmApplied flip-+48.0
Applied associate-*r/48.0
Applied sqrt-div48.1
Simplified29.6
Taylor expanded around -inf 39.1
Simplified39.1
if -1.8516230029597217e-61 < re < -2.094966116257524e-93Initial program 39.2
rmApplied flip-+39.3
Applied associate-*r/39.3
Applied sqrt-div39.4
Simplified31.1
rmApplied add-sqr-sqrt31.1
Applied sqrt-prod31.3
Applied sqrt-prod40.8
Applied times-frac40.9
if -2.094966116257524e-93 < re < -5.77928626929408e-138 or -1.8303214098285669e-162 < re < 3.3926804385297135e+112Initial program 23.7
if -5.77928626929408e-138 < re < -1.8303214098285669e-162Initial program 26.4
Taylor expanded around 0 35.9
if 3.3926804385297135e+112 < re Initial program 50.8
Taylor expanded around inf 8.8
Final simplification23.3
herbie shell --seed 2019004
(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)))))
Time bar (total: 10.3s)Debug log
1 calls. Slowest were:
| 18.0ms | (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))) |
1 alts after pruning (1 fresh and 0 done)
Merged error: 41.4b
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))) |
3 calls. Slowest were:
| 7.0ms | (+ (sqrt (+ (* re re) (* im im))) re) |
| 2.0ms | (sqrt (+ (* re re) (* im im))) |
| 1.0ms | (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))) |
3 calls. Slowest were:
| 90.0ms | (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))) |
| 23.0ms | (+ (sqrt (+ (* re re) (* im im))) re) |
| 19.0ms | (sqrt (+ (* re re) (* im im))) |
18 calls. Slowest were:
| 321.0ms | (sqrt (* 2.0 (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re)))) |
| 135.0ms | (sqrt (* 2.0 (+ (pow (sqrt (+ (* re re) (* im im))) 3) (pow re 3)))) |
| 133.0ms | (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im)))) |
5 alts after pruning (4 fresh and 1 done)
Merged error: 21.2b
Found 4 expressions with local error:
| 31.9b | (sqrt (+ (* re re) (* im im))) |
| 31.1b | (sqrt (* im (* im 2.0))) |
| 0.4b | (- (sqrt (+ (* re re) (* im im))) re) |
| 0.3b | (/ (sqrt (* im (* im 2.0))) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) |
4 calls. Slowest were:
| 13.0ms | (- (sqrt (+ (* re re) (* im im))) re) |
| 12.0ms | (/ (sqrt (* im (* im 2.0))) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) |
| 4.0ms | (sqrt (+ (* re re) (* im im))) |
4 calls. Slowest were:
| 93.0ms | (/ (sqrt (* im (* im 2.0))) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) |
| 43.0ms | (- (sqrt (+ (* re re) (* im im))) re) |
| 30.0ms | (sqrt (* im (* im 2.0))) |
| 23.0ms | (sqrt (+ (* re re) (* im im))) |
81 calls. Slowest were:
| 191.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)))) |
| 101.0ms | (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im)))) |
| 75.0ms | (/ (* im (* im 2.0)) (- (sqrt (+ (* re re) (* im im))) re)) |
9 alts after pruning (8 fresh and 1 done)
Merged error: 11.8b
Found 4 expressions with local error:
| 31.9b | (sqrt (+ (* re re) (* im im))) |
| 31.1b | (sqrt (* im (* im 2.0))) |
| 31.1b | (sqrt (* im (* im 2.0))) |
| 0.4b | (- (sqrt (+ (* re re) (* im im))) re) |
4 calls. Slowest were:
| 20.0ms | (- (sqrt (+ (* re re) (* im im))) re) |
| 4.0ms | (sqrt (+ (* re re) (* im im))) |
| 1.0ms | (sqrt (* im (* im 2.0))) |
4 calls. Slowest were:
| 39.0ms | (- (sqrt (+ (* re re) (* im im))) re) |
| 31.0ms | (sqrt (+ (* re re) (* im im))) |
| 26.0ms | (sqrt (* im (* im 2.0))) |
| 22.0ms | (sqrt (* im (* im 2.0))) |
20 calls. Slowest were:
| 134.0ms | (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im)))) |
| 33.0ms | (sqrt (+ (pow (* re re) 3) (pow (* im im) 3))) |
| 18.0ms | (* -1 (* (sqrt 2.0) im)) |
9 alts after pruning (8 fresh and 1 done)
Merged error: 11.8b
Found 1 expressions with local error:
| 0.2b | (sqrt (* 2.0 (+ im re))) |
1 calls. Slowest were:
| 1.0ms | (sqrt (* 2.0 (+ im re))) |
1 calls. Slowest were:
| 57.0ms | (sqrt (* 2.0 (+ im re))) |
6 calls. Slowest were:
| 180.0ms | (sqrt (* 2.0 (- (* im im) (* re re)))) |
| 45.0ms | (sqrt (* 2.0 (+ (pow im 3) (pow re 3)))) |
| 1.0ms | (sqrt 2.0) |
10 alts after pruning (8 fresh and 2 done)
Merged error: 11.8b
51.5% (13.6b remaining)
Error of 23.3b against oracle of 9.7b and baseline of 37.7b