



Bits error versus re




Bits error versus im
Results
| Original | 37.5 |
|---|---|
| Target | 32.6 |
| Herbie | 22.4 |
if (+ (sqrt (+ (* re re) (* im im))) re) < 0.0Initial program 58.4
rmApplied flip-+58.2
Applied associate-*r/58.2
Applied sqrt-div58.2
Simplified33.6
rmApplied *-un-lft-identity33.6
Applied sqrt-prod33.6
Applied times-frac33.6
Simplified33.6
Simplified10.2
if 0.0 < (+ (sqrt (+ (* re re) (* im im))) re) < 3.1015919697360585e+152Initial program 3.8
if 3.1015919697360585e+152 < (+ (sqrt (+ (* re re) (* im im))) re) Initial program 61.1
rmApplied add-sqr-sqrt61.1
Applied sqrt-prod61.1
Taylor expanded around 0 43.3
Final simplification22.4
herbie shell --seed 2018360
(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: 11.4s)Debug log
1 alts after pruning (1 fresh and 0 done)
Merged error: 36.0b
Found 4 expressions with local error:
| 29.8b | (sqrt (+ (* re re) (* im im))) |
| 0.7b | (+ (sqrt (+ (* re re) (* im im))) re) |
| 0.0b | (+ (* re re) (* im im)) |
| 0.0b | (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))) |
4 calls. Slowest were:
| 14.0ms | (+ (sqrt (+ (* re re) (* im im))) re) |
| 4.0ms | (+ (* re re) (* im im)) |
| 3.0ms | (sqrt (+ (* re re) (* im im))) |
4 calls. Slowest were:
| 114.0ms | (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))) |
| 47.0ms | (+ (sqrt (+ (* re re) (* im im))) re) |
| 31.0ms | (sqrt (+ (* re re) (* im im))) |
| 26.0ms | (+ (* re re) (* im im)) |
22 calls. Slowest were:
| 169.0ms | (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im)))) |
| 164.0ms | (sqrt (* 2.0 (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re)))) |
| 144.0ms | (sqrt (* 2.0 (+ (pow (sqrt (+ (* re re) (* im im))) 3) (pow re 3)))) |
6 alts after pruning (5 fresh and 1 done)
Merged error: 16.8b
Found 4 expressions with local error:
| 29.8b | (sqrt (+ (* re re) (* im im))) |
| 29.8b | (sqrt (+ (* re re) (* im im))) |
| 5.1b | (+ (* (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))))) |
4 calls. Slowest were:
| 15.0ms | (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) |
| 8.0ms | (+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re) |
| 2.0ms | (sqrt (+ (* re re) (* im im))) |
4 calls. Slowest were:
| 40.0ms | (+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re) |
| 38.0ms | (sqrt (+ (* re re) (* im im))) |
| 32.0ms | (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) |
| 31.0ms | (sqrt (+ (* re re) (* im im))) |
64 calls. Slowest were:
| 535.0ms | (sqrt (sqrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im)))))) |
| 488.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))))))) |
| 218.0ms | (* (sqrt (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))) (sqrt (sqrt (+ (pow (* re re) 3) (pow (* im im) 3))))) |
6 alts after pruning (4 fresh and 2 done)
Merged error: 16.8b
Found 4 expressions with local error:
| 29.8b | (sqrt (+ (* re re) (* im im))) |
| 29.8b | (sqrt (+ (* re re) (* im im))) |
| 0.7b | (+ (sqrt (+ (* re re) (* im im))) re) |
| 0.7b | (+ (sqrt (+ (* re re) (* im im))) re) |
4 calls. Slowest were:
| 18.0ms | (+ (sqrt (+ (* re re) (* im im))) re) |
| 15.0ms | (+ (sqrt (+ (* re re) (* im im))) re) |
| 3.0ms | (sqrt (+ (* re re) (* im im))) |
4 calls. Slowest were:
| 32.0ms | (+ (sqrt (+ (* re re) (* im im))) re) |
| 31.0ms | (sqrt (+ (* re re) (* im im))) |
| 31.0ms | (sqrt (+ (* re re) (* im im))) |
| 24.0ms | (+ (sqrt (+ (* re re) (* im im))) re) |
24 calls. Slowest were:
| 133.0ms | (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im)))) |
| 105.0ms | (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im)))) |
| 60.0ms | (sqrt (+ (pow (* re re) 3) (pow (* im im) 3))) |
6 alts after pruning (3 fresh and 3 done)
Merged error: 16.8b
Found 4 expressions with local error:
| 30.7b | (sqrt (* 2.0 (* im im))) |
| 29.8b | (sqrt (+ (* re re) (* im im))) |
| 0.9b | (- (sqrt (+ (* re re) (* im im))) re) |
| 0.3b | (/ (sqrt (* 2.0 (* im im))) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) |
4 calls. Slowest were:
| 15.0ms | (/ (sqrt (* 2.0 (* im im))) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) |
| 15.0ms | (- (sqrt (+ (* re re) (* im im))) re) |
| 4.0ms | (sqrt (+ (* re re) (* im im))) |
4 calls. Slowest were:
| 124.0ms | (/ (sqrt (* 2.0 (* im im))) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) |
| 39.0ms | (- (sqrt (+ (* re re) (* im im))) re) |
| 31.0ms | (sqrt (+ (* re re) (* im im))) |
| 29.0ms | (sqrt (* 2.0 (* im im))) |
81 calls. Slowest were:
| 216.0ms | (/ (* (* (sqrt (* 2.0 (* im im))) (sqrt (* 2.0 (* im im)))) (sqrt (* 2.0 (* im im)))) (* (* (sqrt (- (sqrt (+ (* re re) (* im im))) re)) (sqrt (- (sqrt (+ (* re re) (* im im))) re))) (sqrt (- (sqrt (+ (* re re) (* im im))) re)))) |
| 146.0ms | (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im)))) |
| 52.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: 11.9b
54.7% (12.6b remaining)
Error of 22.4b against oracle of 9.8b and baseline of 37.5b