



Bits error versus re




Bits error versus im
| Original | 37.7 |
|---|---|
| Target | 32.8 |
| Herbie | 10.9 |
if re < -1.5017772580859914e+163Initial program 62.3
rmApplied flip-+62.3
Applied associate-*r/62.3
Applied sqrt-div62.3
Simplified49.8
rmApplied hypot-def16.8
Taylor expanded around inf 26.9
if -1.5017772580859914e+163 < re < -3.548982894061317e+91 or -2.1409451102557175e+42 < re < -6.350457181455309e-35Initial program 50.1
rmApplied flip-+50.1
Applied associate-*r/50.1
Applied sqrt-div50.2
Simplified29.8
rmApplied hypot-def28.0
Taylor expanded around -inf 30.8
Simplified30.8
if -3.548982894061317e+91 < re < -2.1409451102557175e+42Initial program 49.8
rmApplied flip-+49.8
Applied associate-*r/50.0
Applied sqrt-div50.0
Simplified25.7
rmApplied hypot-def25.7
rmApplied sqrt-prod29.7
Applied associate-/l*29.7
if -6.350457181455309e-35 < re Initial program 30.9
Simplified3.9
Final simplification10.9
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)))))
Time bar (total: 12.4s)Debug log
1 calls. Slowest were:
| 35.0ms | (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))) |
2 alts after pruning (2 fresh and 0 done)
Merged error: 15.7b
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))) |
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)) |
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)) |
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))) |
3 alts after pruning (2 fresh and 1 done)
Merged error: 15.7b
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:
| 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))) |
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))) |
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)))) |
3 alts after pruning (2 fresh and 1 done)
Merged error: 11.7b
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))) |
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))) |
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))) |
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)))) |
10 alts after pruning (9 fresh and 1 done)
Merged error: 0.9b
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)))) |
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) |
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)) |
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)))) |
9 alts after pruning (7 fresh and 2 done)
Merged error: 0.0b
18.7% (10.9b remaining)
Error of 10.9b against oracle of 0.1b and baseline of 13.4b