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

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Initial program 28.5

    \[\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.4

    \[\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.4

    \[\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. Final simplification0.3

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

Reproduce

herbie shell --seed 2019016 +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.6m)Debug log

sample161.0ms

Algorithm
intervals
Results
526×(pre true 80)
270×(body nan 80)
129×(body real 80)
127×(body real 160)

simplify49.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
49.0ms
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))

prune16.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 26.0b

localize34.0ms

Local error

Found 4 expressions with local error:

26.0b
(+ (- 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)))

rewrite37.0ms

Algorithm
rewrite-expression-head
Rules
14×*-un-lft-identity
add-sqr-sqrt
add-log-exp
add-cube-cbrt
add-exp-log
add-cbrt-cube
associate-/l*
log1p-expm1-u
times-frac
fma-def
pow1
expm1-log1p-u
distribute-lft-out
sqrt-prod
associate-/l/
flip--
flip-+
associate-+l-
sqrt-div
flip3--
flip3-+
neg-sub0
div-inv
prod-diff
div-exp
div-sub
diff-log
fma-neg
pow1/2
frac-2neg
sub-neg
sum-log
neg-mul-1
associate-/r*
clear-num
rem-sqrt-square
+-commutative
cbrt-undiv
Counts
4 → 77
Calls
4 calls:
Slowest
24.0ms
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))
6.0ms
(+ (- b) (sqrt (- (* b b) (* (* 4 a) c))))
3.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
2.0ms
(- (* b b) (* (* 4 a) c))

series201.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
71.0ms
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))
60.0ms
(+ (- b) (sqrt (- (* b b) (* (* 4 a) c))))
41.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
29.0ms
(- (* b b) (* (* 4 a) c))

simplify2.5s

Counts
40 → 89
Calls
40 calls:
Slowest
404.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* 4 a) c) 3)))
373.0ms
(- (* (- b) (- b)) (* (sqrt (- (* b b) (* (* 4 a) c))) (sqrt (- (* b b) (* (* 4 a) c)))))
157.0ms
(+ (pow (- b) 3) (pow (sqrt (- (* b b) (* (* 4 a) c))) 3))
121.0ms
(sqrt (- (* (* b b) (* b b)) (* (* (* 4 a) c) (* (* 4 a) c))))
120.0ms
(/ (* (* (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (+ (- b) (sqrt (- (* b b) (* (* 4 a) c))))) (+ (- b) (sqrt (- (* b b) (* (* 4 a) c))))) (* (* (* 2 a) (* 2 a)) (* 2 a)))

prune1.1s

Pruning

7 alts after pruning (7 fresh and 0 done)

Merged error: 0.3b

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))

rewrite70.0ms

Algorithm
rewrite-expression-head
Rules
73×prod-diff
56×add-sqr-sqrt
52×*-un-lft-identity
48×add-cube-cbrt
38×sqrt-prod
26×distribute-lft-in
26×distribute-rgt-in
19×neg-mul-1
11×add-exp-log
11×add-cbrt-cube
add-log-exp
associate-*r*
pow1
fma-neg
difference-of-squares
flip--
log1p-expm1-u
associate-*r/
flip3--
sub-neg
expm1-log1p-u
distribute-lft-out--
cbrt-unprod
associate-/r/
prod-exp
div-exp
diff-log
cbrt-undiv
associate-/l*
div-inv
*-commutative
pow-prod-down
associate-*l*
times-frac
frac-2neg
associate-/r*
clear-num
neg-sub0
associate--l-
Counts
4 → 157
Calls
4 calls:
Slowest
30.0ms
(* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))))
15.0ms
(/ (* 4 (* c a)) (* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))))
14.0ms
(- (- b) (sqrt (- (* b b) (* (* 4 a) c))))
5.0ms
(- (* b b) (* (* 4 a) c))

series330.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
134.0ms
(/ (* 4 (* c a)) (* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))))
83.0ms
(* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))))
69.0ms
(- (- b) (sqrt (- (* b b) (* (* 4 a) c))))
43.0ms
(- (* b b) (* (* 4 a) c))

simplify19.5s

Counts
143 → 169
Calls
143 calls:
Slowest
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)))))))
776.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)))))))
436.0ms
(+ (* (- b) (- b)) (+ (* (sqrt (- (* b b) (* (* 4 a) c))) (sqrt (- (* b b) (* (* 4 a) c)))) (* (- b) (sqrt (- (* b b) (* (* 4 a) c))))))
392.0ms
(+ (* (- b) (- b)) (+ (* (sqrt (- (* b b) (* (* 4 a) c))) (sqrt (- (* b b) (* (* 4 a) c)))) (* (- b) (sqrt (- (* b b) (* (* 4 a) c))))))
338.0ms
(* (fma (- (sqrt (- (* b b) (* (* 4 a) c)))) 1 (* (sqrt (- (* b b) (* (* 4 a) c))) 1)) (* 2 a))

prune1.9s

Pruning

10 alts after pruning (10 fresh and 0 done)

Merged error: 0b

localize17.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
(fma (* a -4) c (* b b))
0.2b
(- (- b) (sqrt (fma (* a -4) c (* b b))))
0.1b
(sqrt (fma (* a -4) c (* b b)))

rewrite31.0ms

Algorithm
rewrite-expression-head
Rules
62×add-sqr-sqrt
47×*-un-lft-identity
37×times-frac
33×add-cube-cbrt
24×prod-diff
22×sqrt-prod
14×difference-of-squares
add-exp-log
add-cbrt-cube
div-inv
distribute-lft-out--
neg-mul-1
add-log-exp
associate-/r*
associate-/l*
log1p-expm1-u
fma-neg
pow1
expm1-log1p-u
div-exp
cbrt-undiv
flip--
associate-/r/
flip3--
associate-/l/
fma-udef
diff-log
pow1/2
frac-2neg
sub-neg
clear-num
rem-sqrt-square
neg-sub0
associate--l-
Counts
4 → 130
Calls
4 calls:
Slowest
14.0ms
(/ (/ (* 4 (* c a)) (* 2 a)) (- (- b) (sqrt (fma (* a -4) c (* b b)))))
12.0ms
(- (- b) (sqrt (fma (* a -4) c (* b b))))
1.0ms
(sqrt (fma (* a -4) c (* b b)))
0.0ms
(fma (* a -4) c (* b b))

series225.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
115.0ms
(/ (/ (* 4 (* c a)) (* 2 a)) (- (- b) (sqrt (fma (* a -4) c (* b b)))))
41.0ms
(- (- b) (sqrt (fma (* a -4) c (* b b))))
41.0ms
(sqrt (fma (* a -4) c (* b b)))
28.0ms
(fma (* a -4) c (* b b))

simplify33.1s

Counts
149 → 142
Calls
149 calls:
Slowest
1.5s
(/ (/ (* (* (* 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))))))
1.2s
(sqrt (/ (* 4 (* c a)) (* 2 a)))
1.1s
(/ (* (cbrt (/ (* 4 (* c a)) (* 2 a))) (cbrt (/ (* 4 (* c a)) (* 2 a)))) (+ (sqrt (- b)) (sqrt (sqrt (fma (* a -4) c (* b b))))))
999.0ms
(/ (* (cbrt (/ (* 4 (* c a)) (* 2 a))) (cbrt (/ (* 4 (* c a)) (* 2 a)))) (sqrt (- (- b) (sqrt (fma (* a -4) c (* b b))))))
976.0ms
(/ (* (cbrt (/ (* 4 (* c a)) (* 2 a))) (cbrt (/ (* 4 (* c a)) (* 2 a)))) (+ (sqrt (- b)) (sqrt (sqrt (fma (* a -4) c (* b b))))))

prune1.4s

Pruning

7 alts after pruning (6 fresh and 1 done)

Merged error: 0b

localize12.0ms

Local error

Found 4 expressions with local error:

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

rewrite16.0ms

Algorithm
rewrite-expression-head
Rules
27×add-sqr-sqrt
25×times-frac
21×add-cube-cbrt
21×*-un-lft-identity
18×sqrt-prod
11×add-exp-log
11×add-cbrt-cube
associate-*l*
associate-*r*
pow1
difference-of-squares
div-inv
associate-/l*
add-log-exp
log1p-expm1-u
pow1/2
associate-/r*
expm1-log1p-u
div-exp
cbrt-undiv
fma-udef
pow-prod-up
associate-/r/
pow-prod-down
associate-/l/
flip--
cbrt-unprod
*-commutative
prod-exp
sqrt-unprod
flip3--
pow-plus
frac-2neg
rem-square-sqrt
clear-num
pow2
Counts
4 → 106
Calls
4 calls:
Slowest
8.0ms
(/ (/ (* 4 (* c a)) (* 2 a)) (- (- b) (* (sqrt (sqrt (fma (* a -4) c (* b b)))) (sqrt (sqrt (fma (* a -4) c (* b b)))))))
6.0ms
(* (sqrt (sqrt (fma (* a -4) c (* b b)))) (sqrt (sqrt (fma (* a -4) c (* b b)))))
0.0ms
(fma (* a -4) c (* b b))
0.0ms
(fma (* a -4) c (* b b))

series274.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
169.0ms
(/ (/ (* 4 (* c a)) (* 2 a)) (- (- b) (* (sqrt (sqrt (fma (* a -4) c (* b b)))) (sqrt (sqrt (fma (* a -4) c (* b b)))))))
45.0ms
(* (sqrt (sqrt (fma (* a -4) c (* b b)))) (sqrt (sqrt (fma (* a -4) c (* b b)))))
32.0ms
(fma (* a -4) c (* b b))
28.0ms
(fma (* a -4) c (* b b))

simplify25.7s

Counts
95 → 118
Calls
95 calls:
Slowest
1.3s
(/ (sqrt (/ (* 4 (* c a)) (* 2 a))) (cbrt (- (- b) (* (sqrt (sqrt (fma (* a -4) c (* b b)))) (sqrt (sqrt (fma (* a -4) c (* b b))))))))
1.3s
(/ (cbrt (/ (* 4 (* c a)) (* 2 a))) (cbrt (- (- b) (* (sqrt (sqrt (fma (* a -4) c (* b b)))) (sqrt (sqrt (fma (* a -4) c (* b b))))))))
1.2s
(/ (sqrt (/ (* 4 (* c a)) (* 2 a))) (sqrt (- (- b) (* (sqrt (sqrt (fma (* a -4) c (* b b)))) (sqrt (sqrt (fma (* a -4) c (* b b))))))))
1.2s
(/ (cbrt (/ (* 4 (* c a)) (* 2 a))) (sqrt (- (- b) (* (sqrt (sqrt (fma (* a -4) c (* b b)))) (sqrt (sqrt (fma (* a -4) c (* b b))))))))
1.2s
(/ (/ (* (* (* 4 (* c a)) (* 4 (* c a))) (* 4 (* c a))) (* (* (* 2 a) (* 2 a)) (* 2 a))) (* (* (- (- b) (* (sqrt (sqrt (fma (* a -4) c (* b b)))) (sqrt (sqrt (fma (* a -4) c (* b b)))))) (- (- b) (* (sqrt (sqrt (fma (* a -4) c (* b b)))) (sqrt (sqrt (fma (* a -4) c (* b b))))))) (- (- b) (* (sqrt (sqrt (fma (* a -4) c (* b b)))) (sqrt (sqrt (fma (* a -4) c (* b b))))))))

prune1.7s

Pruning

7 alts after pruning (5 fresh and 2 done)

Merged error: 0b

regimes219.0ms

Accuracy

0% (0.3b remaining)

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

bsearch2.0ms

end0.0ms

sample5.0s

Algorithm
intervals
Results
16490×(pre true 80)
8490×(body nan 80)
4439×(body real 160)
3561×(body real 80)