Average Error: 28.7 → 0.4
Time: 1.5m
Precision: 64
Internal Precision: 128
\[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
\[\frac{2}{\left(-b\right) - \sqrt{(\left(a \cdot -4\right) \cdot c + \left(b \cdot b\right))_*}} \cdot c\]

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Initial program 28.7

    \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
  2. Using strategy rm
  3. Applied flip-+28.8

    \[\leadsto \frac{\color{blue}{\frac{\left(-b\right) \cdot \left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} \cdot \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}}{2 \cdot a}\]
  4. Applied associate-/l/28.8

    \[\leadsto \color{blue}{\frac{\left(-b\right) \cdot \left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} \cdot \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{\left(2 \cdot a\right) \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}}\]
  5. Simplified0.5

    \[\leadsto \frac{\color{blue}{4 \cdot \left(c \cdot a\right)}}{\left(2 \cdot a\right) \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}\]
  6. Using strategy rm
  7. Applied associate-/r*0.3

    \[\leadsto \color{blue}{\frac{\frac{4 \cdot \left(c \cdot a\right)}{2 \cdot a}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\]
  8. Simplified0.3

    \[\leadsto \frac{\frac{4 \cdot \left(c \cdot a\right)}{2 \cdot a}}{\color{blue}{\left(-b\right) - \sqrt{(\left(a \cdot -4\right) \cdot c + \left(b \cdot b\right))_*}}}\]
  9. Using strategy rm
  10. Applied times-frac0.3

    \[\leadsto \frac{\color{blue}{\frac{4}{2} \cdot \frac{c \cdot a}{a}}}{\left(-b\right) - \sqrt{(\left(a \cdot -4\right) \cdot c + \left(b \cdot b\right))_*}}\]
  11. Applied associate-/l*0.4

    \[\leadsto \color{blue}{\frac{\frac{4}{2}}{\frac{\left(-b\right) - \sqrt{(\left(a \cdot -4\right) \cdot c + \left(b \cdot b\right))_*}}{\frac{c \cdot a}{a}}}}\]
  12. Simplified0.4

    \[\leadsto \frac{\color{blue}{2}}{\frac{\left(-b\right) - \sqrt{(\left(a \cdot -4\right) \cdot c + \left(b \cdot b\right))_*}}{\frac{c \cdot a}{a}}}\]
  13. Using strategy rm
  14. Applied associate-/r/0.4

    \[\leadsto \color{blue}{\frac{2}{\left(-b\right) - \sqrt{(\left(a \cdot -4\right) \cdot c + \left(b \cdot b\right))_*}} \cdot \frac{c \cdot a}{a}}\]
  15. Simplified0.4

    \[\leadsto \frac{2}{\left(-b\right) - \sqrt{(\left(a \cdot -4\right) \cdot c + \left(b \cdot b\right))_*}} \cdot \color{blue}{c}\]
  16. Final simplification0.4

    \[\leadsto \frac{2}{\left(-b\right) - \sqrt{(\left(a \cdot -4\right) \cdot c + \left(b \cdot b\right))_*}} \cdot c\]

Reproduce

herbie shell --seed 2018360 +o rules:numerics
(FPCore (a b c)
  :name "Quadratic roots, narrow range"
  :pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
  (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))

Details

Time bar (total: 1.4m)Debug log

start213.0ms

Algorithm
intervals

setup96.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 29.1b

localize27.0ms

Local error

Found 4 expressions with local error:

28.9b
(+ (- b) (sqrt (- (* b b) (* (* 4 a) c))))
0.2b
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))
0.2b
(- (* b b) (* (* 4 a) c))
0.1b
(sqrt (- (* b b) (* (* 4 a) c)))

rewrite33.0ms

Algorithm
rewrite-expression-head
Counts
4 → 77
Calls

4 calls. Slowest were:

17.0ms
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))
7.0ms
(+ (- b) (sqrt (- (* b b) (* (* 4 a) c))))
6.0ms
(- (* b b) (* (* 4 a) c))

series196.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

77.0ms
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))
45.0ms
(+ (- b) (sqrt (- (* b b) (* (* 4 a) c))))
43.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
30.0ms
(- (* b b) (* (* 4 a) c))

simplify2.5s

Counts
40 → 89
Calls

40 calls. Slowest were:

379.0ms
(- (* (- b) (- b)) (* (sqrt (- (* b b) (* (* 4 a) c))) (sqrt (- (* b b) (* (* 4 a) c)))))
311.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* 4 a) c) 3)))
308.0ms
(+ (pow (- b) 3) (pow (sqrt (- (* b b) (* (* 4 a) c))) 3))

prune996.0ms

Pruning

4 alts after pruning (4 fresh and 0 done)

Merged error: 0.4b

localize15.0ms

Local error

Found 4 expressions with local error:

0.4b
(/ (* 4 (* c a)) (* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))))
0.2b
(* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))))
0.2b
(- (- b) (sqrt (- (* b b) (* (* 4 a) c))))
0.2b
(- (* b b) (* (* 4 a) c))

rewrite34.0ms

Algorithm
rewrite-expression-head
Counts
4 → 157
Calls

4 calls. Slowest were:

14.0ms
(* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))))
9.0ms
(/ (* 4 (* c a)) (* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))))
7.0ms
(- (- b) (sqrt (- (* b b) (* (* 4 a) c))))

series373.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

168.0ms
(/ (* 4 (* c a)) (* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))))
96.0ms
(* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))))
67.0ms
(- (- b) (sqrt (- (* b b) (* (* 4 a) c))))
42.0ms
(- (* b b) (* (* 4 a) c))

simplify20.4s

Counts
143 → 169
Calls

143 calls. Slowest were:

1.1s
(/ (* (* (* 4 (* c a)) (* 4 (* c a))) (* 4 (* c a))) (* (* (* (* 2 a) (* 2 a)) (* 2 a)) (* (* (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))) (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))))))
758.0ms
(/ (* (* (* 4 (* c a)) (* 4 (* c a))) (* 4 (* c a))) (* (* (* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))) (* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))))) (* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))))))
555.0ms
(* (* 2 a) (fma (- (sqrt (sqrt (- (* b b) (* (* 4 a) c))))) (sqrt (sqrt (- (* b b) (* (* 4 a) c)))) (* (sqrt (sqrt (- (* b b) (* (* 4 a) c)))) (sqrt (sqrt (- (* b b) (* (* 4 a) c)))))))

prune2.8s

Pruning

10 alts after pruning (10 fresh and 0 done)

Merged error: 0.0b

localize24.0ms

Local error

Found 4 expressions with local error:

0.2b
(/ (/ (* 4 (* c a)) (* 2 a)) (- (- b) (sqrt (fma (* a -4) c (* b b)))))
0.2b
(- (- b) (sqrt (fma (* a -4) c (* b b))))
0.2b
(fma (* a -4) c (* b b))
0.1b
(/ (* 4 (* c a)) (* 2 a))

rewrite23.0ms

Algorithm
rewrite-expression-head
Counts
4 → 133
Calls

4 calls. Slowest were:

9.0ms
(/ (/ (* 4 (* c a)) (* 2 a)) (- (- b) (sqrt (fma (* a -4) c (* b b)))))
6.0ms
(- (- b) (sqrt (fma (* a -4) c (* b b))))
5.0ms
(/ (* 4 (* c a)) (* 2 a))

series209.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

122.0ms
(/ (/ (* 4 (* c a)) (* 2 a)) (- (- b) (sqrt (fma (* a -4) c (* b b)))))
42.0ms
(- (- b) (sqrt (fma (* a -4) c (* b b))))
38.0ms
(fma (* a -4) c (* b b))
7.0ms
(/ (* 4 (* c a)) (* 2 a))

simplify35.9s

Counts
149 → 145
Calls

149 calls. Slowest were:

1.1s
(sqrt (/ (* 4 (* c a)) (* 2 a)))
1.1s
(/ (sqrt (/ (* 4 (* c a)) (* 2 a))) (sqrt (- (- b) (sqrt (fma (* a -4) c (* b b))))))
1.1s
(/ (/ (* (* (* 4 (* c a)) (* 4 (* c a))) (* 4 (* c a))) (* (* (* 2 a) (* 2 a)) (* 2 a))) (* (* (- (- b) (sqrt (fma (* a -4) c (* b b)))) (- (- b) (sqrt (fma (* a -4) c (* b b))))) (- (- b) (sqrt (fma (* a -4) c (* b b))))))

prune2.1s

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 0b

localize18.0ms

Local error

Found 4 expressions with local error:

0.3b
(/ 2 (/ (- (- b) (sqrt (fma (* a -4) c (* b b)))) (/ (* c a) a)))
0.2b
(- (- b) (sqrt (fma (* a -4) c (* b b))))
0.2b
(fma (* a -4) c (* b b))
0.2b
(/ (- (- b) (sqrt (fma (* a -4) c (* b b)))) (/ (* c a) a))

rewrite37.0ms

Algorithm
rewrite-expression-head
Counts
4 → 150
Calls

4 calls. Slowest were:

20.0ms
(/ (- (- b) (sqrt (fma (* a -4) c (* b b)))) (/ (* c a) a))
9.0ms
(- (- b) (sqrt (fma (* a -4) c (* b b))))
5.0ms
(/ 2 (/ (- (- b) (sqrt (fma (* a -4) c (* b b)))) (/ (* c a) a)))

series202.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

69.0ms
(/ 2 (/ (- (- b) (sqrt (fma (* a -4) c (* b b)))) (/ (* c a) a)))
51.0ms
(/ (- (- b) (sqrt (fma (* a -4) c (* b b)))) (/ (* c a) a))
50.0ms
(- (- b) (sqrt (fma (* a -4) c (* b b))))
31.0ms
(fma (* a -4) c (* b b))

simplify12.7s

Counts
158 → 162
Calls

158 calls. Slowest were:

879.0ms
(- (* (- b) (- b)) (* (sqrt (fma (* a -4) c (* b b))) (sqrt (fma (* a -4) c (* b b)))))
732.0ms
(/ (- (sqrt (- b)) (sqrt (sqrt (fma (* a -4) c (* b b))))) (/ (* c a) a))
545.0ms
(sqrt (/ (- (- b) (sqrt (fma (* a -4) c (* b b)))) (/ (* c a) a)))

prune2.2s

Pruning

9 alts after pruning (7 fresh and 2 done)

Merged error: 0b

regimes276.0ms

Accuracy

0% (0.4b remaining)

Error of 0.4b against oracle of 0.0b and baseline of 0.4b

bsearch1.0ms