



Bits error versus re




Bits error versus im
Results
| Original | 37.5 |
|---|---|
| Target | 32.7 |
| Herbie | 26.7 |
if re < -2.947661281951509e-279Initial program 45.2
rmApplied flip-+45.1
Applied associate-*r/45.1
Applied sqrt-div45.2
Simplified34.3
if -2.947661281951509e-279 < re < 2.4967545228125466e-154Initial program 28.7
Taylor expanded around 0 34.1
if 2.4967545228125466e-154 < re < 5.050847689368872e+115Initial program 15.7
rmApplied add-sqr-sqrt15.7
if 5.050847689368872e+115 < re Initial program 52.6
Taylor expanded around inf 9.7
Final simplification26.7
herbie shell --seed 2019002
(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: 17.1s)Debug log
1 calls. Slowest were:
| 17.0ms | (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))) |
1 alts after pruning (1 fresh and 0 done)
Merged error: 37.7b
Found 4 expressions with local error:
| 28.7b | (sqrt (+ (* re re) (* im im))) |
| 0.2b | (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))) |
| 0.1b | (+ (sqrt (+ (* re re) (* im im))) re) |
| 0.0b | (+ (* re re) (* im im)) |
4 calls. Slowest were:
| 14.0ms | (+ (sqrt (+ (* re re) (* im im))) re) |
| 4.0ms | (sqrt (+ (* re re) (* im im))) |
| 4.0ms | (+ (* re re) (* im im)) |
4 calls. Slowest were:
| 100.0ms | (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))) |
| 41.0ms | (sqrt (+ (* re re) (* im im))) |
| 38.0ms | (+ (sqrt (+ (* re re) (* im im))) re) |
| 15.0ms | (+ (* re re) (* im im)) |
22 calls. Slowest were:
| 401.0ms | (sqrt (* 2.0 (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re)))) |
| 140.0ms | (sqrt (* 2.0 (+ (pow (sqrt (+ (* re re) (* im im))) 3) (pow re 3)))) |
| 120.0ms | (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im)))) |
7 alts after pruning (7 fresh and 0 done)
Merged error: 16.0b
Found 4 expressions with local error:
| 28.7b | (sqrt (+ (* re re) (* im im))) |
| 28.7b | (sqrt (+ (* re re) (* im im))) |
| 7.7b | (+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re) |
| 0.6b | (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) |
4 calls. Slowest were:
| 11.0ms | (+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re) |
| 10.0ms | (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) |
| 2.0ms | (sqrt (+ (* re re) (* im im))) |
4 calls. Slowest were:
| 38.0ms | (+ (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) re) |
| 31.0ms | (* (sqrt (sqrt (+ (* re re) (* im im)))) (sqrt (sqrt (+ (* re re) (* im im))))) |
| 30.0ms | (sqrt (+ (* re re) (* im im))) |
| 26.0ms | (sqrt (+ (* re re) (* im im))) |
64 calls. Slowest were:
| 221.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))))))) |
| 210.0ms | (* (sqrt (sqrt (- (* re re) (* im im)))) (sqrt (sqrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im))))))) |
| 192.0ms | (* (sqrt (sqrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im)))))) (sqrt (sqrt (- (* re re) (* im im))))) |
9 alts after pruning (8 fresh and 1 done)
Merged error: 16.0b
Found 4 expressions with local error:
| 28.7b | (sqrt (+ (* re re) (* im im))) |
| 28.7b | (sqrt (+ (* re re) (* im im))) |
| 0.4b | (* (sqrt (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))) (sqrt (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))))) |
| 0.2b | (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))) |
4 calls. Slowest were:
| 23.0ms | (* (sqrt (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))) (sqrt (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))))) |
| 4.0ms | (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))) |
| 4.0ms | (sqrt (+ (* re re) (* im im))) |
4 calls. Slowest were:
| 115.0ms | (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))) |
| 97.0ms | (* (sqrt (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))) (sqrt (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re))))) |
| 30.0ms | (sqrt (+ (* re re) (* im im))) |
| 23.0ms | (sqrt (+ (* re re) (* im im))) |
63 calls. Slowest were:
| 562.0ms | (* (sqrt (sqrt (* 2.0 (+ (pow (sqrt (+ (* re re) (* im im))) 3) (pow re 3))))) (sqrt (sqrt (* 2.0 (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re)))))) |
| 443.0ms | (* (sqrt (sqrt (* 2.0 (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re))))) (sqrt (sqrt (* 2.0 (+ (pow (sqrt (+ (* re re) (* im im))) 3) (pow re 3)))))) |
| 391.0ms | (sqrt (* 2.0 (- (* (sqrt (+ (* re re) (* im im))) (sqrt (+ (* re re) (* im im)))) (* re re)))) |
9 alts after pruning (7 fresh and 2 done)
Merged error: 16.0b
Found 4 expressions with local error:
| 28.7b | (sqrt (+ (* re re) (* im im))) |
| 28.7b | (sqrt (+ (* re re) (* im im))) |
| 28.7b | (sqrt (+ (* re re) (* im im))) |
| 28.7b | (sqrt (+ (* re re) (* im im))) |
4 calls. Slowest were:
| 2.0ms | (sqrt (+ (* re re) (* im im))) |
| 2.0ms | (sqrt (+ (* re re) (* im im))) |
| 2.0ms | (sqrt (+ (* re re) (* im im))) |
4 calls. Slowest were:
| 32.0ms | (sqrt (+ (* re re) (* im im))) |
| 30.0ms | (sqrt (+ (* re re) (* im im))) |
| 29.0ms | (sqrt (+ (* re re) (* im im))) |
| 22.0ms | (sqrt (+ (* re re) (* im im))) |
36 calls. Slowest were:
| 164.0ms | (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im)))) |
| 162.0ms | (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im)))) |
| 149.0ms | (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im)))) |
9 alts after pruning (6 fresh and 3 done)
Merged error: 16.0b
54.3% (9.4b remaining)
Error of 26.7b against oracle of 17.2b and baseline of 37.9b