


Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < 4.873574385931286e+105Initial program 14.8
Simplified14.8
rmApplied add-sqr-sqrt14.8
Applied sqrt-prod14.9
rmApplied add-sqr-sqrt15.0
if 4.873574385931286e+105 < b Initial program 46.5
Simplified46.5
Taylor expanded around 0 4.1
Final simplification13.4
herbie shell --seed 2019002
(FPCore (a b c)
:name "jeff quadratic root 1"
(if (>= b 0) (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ (* 2 c) (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))))))
Time bar (total: 18.9s)Debug log
1 calls. Slowest were:
| 117.0ms | (if (>= b 0) (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ (* 2 c) (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))))) |
1 alts after pruning (1 fresh and 0 done)
Merged error: 18.4b
Found 4 expressions with local error:
| 22.2b | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 22.2b | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 1.9b | (- (- b) (sqrt (+ (* (* -4 a) c) (* b b)))) |
| 1.3b | (- (sqrt (+ (* (* -4 a) c) (* b b))) b) |
4 calls. Slowest were:
| 15.0ms | (- (sqrt (+ (* (* -4 a) c) (* b b))) b) |
| 10.0ms | (- (- b) (sqrt (+ (* (* -4 a) c) (* b b)))) |
| 3.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
4 calls. Slowest were:
| 383.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 75.0ms | (- (- b) (sqrt (+ (* (* -4 a) c) (* b b)))) |
| 74.0ms | (- (sqrt (+ (* (* -4 a) c) (* b b))) b) |
| 43.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
30 calls. Slowest were:
| 266.0ms | (sqrt (- (* (* (* -4 a) c) (* (* -4 a) c)) (* (* b b) (* b b)))) |
| 235.0ms | (sqrt (+ (pow (* (* -4 a) c) 3) (pow (* b b) 3))) |
| 220.0ms | (sqrt (- (* (* (* -4 a) c) (* (* -4 a) c)) (* (* b b) (* b b)))) |
9 alts after pruning (9 fresh and 0 done)
Merged error: 11.0b
Found 4 expressions with local error:
| 22.2b | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 22.2b | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 22.2b | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 13.0b | (- (* (sqrt (sqrt (+ (* (* -4 a) c) (* b b)))) (sqrt (sqrt (+ (* (* -4 a) c) (* b b))))) b) |
4 calls. Slowest were:
| 23.0ms | (- (* (sqrt (sqrt (+ (* (* -4 a) c) (* b b)))) (sqrt (sqrt (+ (* (* -4 a) c) (* b b))))) b) |
| 4.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 3.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
4 calls. Slowest were:
| 68.0ms | (- (* (sqrt (sqrt (+ (* (* -4 a) c) (* b b)))) (sqrt (sqrt (+ (* (* -4 a) c) (* b b))))) b) |
| 60.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 52.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 48.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
30 calls. Slowest were:
| 288.0ms | (sqrt (- (* (* (* -4 a) c) (* (* -4 a) c)) (* (* b b) (* b b)))) |
| 268.0ms | (sqrt (- (* (* (* -4 a) c) (* (* -4 a) c)) (* (* b b) (* b b)))) |
| 241.0ms | (sqrt (+ (pow (* (* -4 a) c) 3) (pow (* b b) 3))) |
8 alts after pruning (8 fresh and 0 done)
Merged error: 11.0b
Found 4 expressions with local error:
| 22.2b | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 22.2b | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 22.2b | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 22.2b | (sqrt (+ (* (* -4 a) c) (* b b))) |
4 calls. Slowest were:
| 6.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 5.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 3.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
4 calls. Slowest were:
| 69.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 69.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 68.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 49.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
36 calls. Slowest were:
| 296.0ms | (sqrt (- (* (* (* -4 a) c) (* (* -4 a) c)) (* (* b b) (* b b)))) |
| 278.0ms | (sqrt (- (* (* (* -4 a) c) (* (* -4 a) c)) (* (* b b) (* b b)))) |
| 261.0ms | (sqrt (- (* (* (* -4 a) c) (* (* -4 a) c)) (* (* b b) (* b b)))) |
8 alts after pruning (7 fresh and 1 done)
Merged error: 11.0b
Found 4 expressions with local error:
| 23.0b | (cbrt (+ (* (* -4 a) c) (* b b))) |
| 23.0b | (cbrt (+ (* b b) (* (* c a) -4))) |
| 22.2b | (sqrt (+ (* (* -4 a) c) (* b b))) |
| 10.0b | (- (- b) (* (fabs (cbrt (+ (* b b) (* (* c a) -4)))) (sqrt (cbrt (+ (* (* -4 a) c) (* b b)))))) |
4 calls. Slowest were:
| 4.0ms | (cbrt (+ (* (* -4 a) c) (* b b))) |
| 4.0ms | (- (- b) (* (fabs (cbrt (+ (* b b) (* (* c a) -4)))) (sqrt (cbrt (+ (* (* -4 a) c) (* b b)))))) |
| 3.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
4 calls. Slowest were:
| 218.0ms | (cbrt (+ (* (* -4 a) c) (* b b))) |
| 115.0ms | (cbrt (+ (* b b) (* (* c a) -4))) |
| 93.0ms | (- (- b) (* (fabs (cbrt (+ (* b b) (* (* c a) -4)))) (sqrt (cbrt (+ (* (* -4 a) c) (* b b)))))) |
| 60.0ms | (sqrt (+ (* (* -4 a) c) (* b b))) |
29 calls. Slowest were:
| 409.0ms | (exp (* 1/3 (- (log -4) (+ (log (/ 1 a)) (log (/ 1 c)))))) |
| 279.0ms | (- (exp (* 1/3 (+ (log -4) (+ (log a) (log c))))) (* 1/12 (* (exp (* 1/3 (- (log -4) (+ (* 2 (log a)) (* 2 (log c)))))) (pow b 2)))) |
| 260.0ms | (cbrt (+ (pow (* (* -4 a) c) 3) (pow (* b b) 3))) |
9 alts after pruning (8 fresh and 1 done)
Merged error: 11.0b
90.2% (0.7b remaining)
Error of 13.4b against oracle of 12.8b and baseline of 19.5b