Average Error: 33.5 → 10.7
Time: 21.1s
Precision: 64
Internal Precision: 128
\[\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le -3.434444833633684 \cdot 10^{+56}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le 5.633475377269129 \cdot 10^{-146}:\\ \;\;\;\;\left(\sqrt{b \cdot b - \left(a \cdot 4\right) \cdot c} - b\right) \cdot \frac{1}{a \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]

Error

Bits error versus a

Bits error versus b

Bits error versus c

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original33.5
Target20.5
Herbie10.7
\[\begin{array}{l} \mathbf{if}\;b \lt 0:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if b < -3.434444833633684e+56

    1. Initial program 37.6

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Simplified37.6

      \[\leadsto \color{blue}{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{2 \cdot a}}\]
    3. Taylor expanded around -inf 5.1

      \[\leadsto \color{blue}{\frac{c}{b} - \frac{b}{a}}\]

    if -3.434444833633684e+56 < b < 5.633475377269129e-146

    1. Initial program 11.2

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Simplified11.2

      \[\leadsto \color{blue}{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{2 \cdot a}}\]
    3. Using strategy rm
    4. Applied div-inv11.3

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

    if 5.633475377269129e-146 < b

    1. Initial program 49.8

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Simplified49.8

      \[\leadsto \color{blue}{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{2 \cdot a}}\]
    3. Taylor expanded around inf 12.5

      \[\leadsto \color{blue}{-1 \cdot \frac{c}{b}}\]
    4. Simplified12.5

      \[\leadsto \color{blue}{\frac{-c}{b}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification10.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -3.434444833633684 \cdot 10^{+56}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le 5.633475377269129 \cdot 10^{-146}:\\ \;\;\;\;\left(\sqrt{b \cdot b - \left(a \cdot 4\right) \cdot c} - b\right) \cdot \frac{1}{a \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019021 
(FPCore (a b c)
  :name "quadp (p42, positive)"

  :herbie-target
  (if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))))

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

Details

Time bar (total: 19.7s)Debug log

sample180.0ms

Algorithm
intervals
Results
58.0ms37×body2560valid
34.0ms190×body80valid
20.0ms22×body1280valid
13.0ms76×body80nan
12.0ms18×body640valid
6.0ms11×body320valid
5.0msbody5120valid
1.0msbody160valid

simplify64.0ms

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

prune17.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 33.6b

localize20.0ms

Local error

Found 4 expressions with local error:

23.1b
(sqrt (- (* b b) (* (* 4 a) c)))
1.1b
(- (sqrt (- (* b b) (* (* 4 a) c))) b)
0.6b
(- (* b b) (* (* 4 a) c))
0.1b
(/ (- (sqrt (- (* b b) (* (* 4 a) c))) b) (* 2 a))

rewrite47.0ms

Algorithm
rewrite-expression-head
Rules
add-sqr-sqrt
add-cube-cbrt
*-un-lft-identity
add-log-exp
add-exp-log
add-cbrt-cube
flip--
flip3--
pow1
associate-/l*
sqrt-prod
times-frac
associate-/l/
sqrt-div
sub-neg
div-inv
div-exp
div-sub
diff-log
pow1/2
frac-2neg
associate-/r*
clear-num
rem-sqrt-square
cbrt-undiv
Counts
4 → 59
Calls
4 calls:
Slowest
32.0ms
(/ (- (sqrt (- (* b b) (* (* 4 a) c))) b) (* 2 a))
11.0ms
(- (sqrt (- (* b b) (* (* 4 a) c))) b)
2.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
2.0ms
(- (* b b) (* (* 4 a) c))

series226.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
92.0ms
(/ (- (sqrt (- (* b b) (* (* 4 a) c))) b) (* 2 a))
57.0ms
(- (sqrt (- (* b b) (* (* 4 a) c))) b)
46.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
31.0ms
(- (* b b) (* (* 4 a) c))

simplify2.2s

Counts
32 → 71
Calls
32 calls:
Slowest
358.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* 4 a) c) 3)))
349.0ms
(- (* (sqrt (- (* b b) (* (* 4 a) c))) (sqrt (- (* b b) (* (* 4 a) c)))) (* b b))
193.0ms
(sqrt (- (* (* b b) (* b b)) (* (* (* 4 a) c) (* (* 4 a) c))))
193.0ms
(- (pow (sqrt (- (* b b) (* (* 4 a) c))) 3) (pow b 3))
116.0ms
(- b (* 2 (/ (* a c) b)))

prune764.0ms

Pruning

10 alts after pruning (10 fresh and 0 done)

Merged error: 5.9b

localize6.0ms

Local error

Found 4 expressions with local error:

23.1b
(sqrt (- (* b b) (* (* 4 a) c)))
1.1b
(- (sqrt (- (* b b) (* (* 4 a) c))) b)
0.6b
(- (* b b) (* (* 4 a) c))
0.2b
(* (- (sqrt (- (* b b) (* (* 4 a) c))) b) (/ 1 (* 2 a)))

rewrite60.0ms

Algorithm
rewrite-expression-head
Rules
add-exp-log
add-sqr-sqrt
add-cube-cbrt
*-un-lft-identity
add-log-exp
add-cbrt-cube
pow1
flip--
flip3--
associate-*r*
sqrt-prod
associate-*l*
prod-exp
associate-*l/
sqrt-div
sub-neg
frac-times
div-inv
cbrt-unprod
*-commutative
un-div-inv
associate-*r/
pow-prod-down
diff-log
pow1/2
rec-exp
rem-sqrt-square
Counts
4 → 62
Calls
4 calls:
Slowest
37.0ms
(* (- (sqrt (- (* b b) (* (* 4 a) c))) b) (/ 1 (* 2 a)))
16.0ms
(- (sqrt (- (* b b) (* (* 4 a) c))) b)
4.0ms
(- (* b b) (* (* 4 a) c))
2.0ms
(sqrt (- (* b b) (* (* 4 a) c)))

series229.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
72.0ms
(* (- (sqrt (- (* b b) (* (* 4 a) c))) b) (/ 1 (* 2 a)))
62.0ms
(- (sqrt (- (* b b) (* (* 4 a) c))) b)
53.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
42.0ms
(- (* b b) (* (* 4 a) c))

simplify3.6s

Counts
37 → 74
Calls
37 calls:
Slowest
630.0ms
(* (- (pow (sqrt (- (* b b) (* (* 4 a) c))) 3) (pow b 3)) 1)
550.0ms
(* (- (* (sqrt (- (* b b) (* (* 4 a) c))) (sqrt (- (* b b) (* (* 4 a) c)))) (* b b)) 1)
309.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* 4 a) c) 3)))
287.0ms
(* (- (* (sqrt (- (* b b) (* (* 4 a) c))) (sqrt (- (* b b) (* (* 4 a) c)))) (* b b)) (/ 1 (* 2 a)))
251.0ms
(* (- (sqrt (- (* b b) (* (* 4 a) c))) b) (/ 1 (* 2 a)))

prune675.0ms

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 5.9b

localize16.0ms

Local error

Found 4 expressions with local error:

23.1b
(sqrt (- (* b b) (* (* 4 a) c)))
23.1b
(sqrt (- (* b b) (* (* 4 a) c)))
1.1b
(- (sqrt (- (* b b) (* (* 4 a) c))) b)
1.1b
(- (sqrt (- (* b b) (* (* 4 a) c))) b)

rewrite27.0ms

Algorithm
rewrite-expression-head
Rules
add-sqr-sqrt
sqrt-prod
add-cube-cbrt
*-un-lft-identity
add-log-exp
flip--
add-exp-log
sqrt-div
add-cbrt-cube
flip3--
pow1
pow1/2
sub-neg
rem-sqrt-square
Counts
4 → 50
Calls
4 calls:
Slowest
12.0ms
(- (sqrt (- (* b b) (* (* 4 a) c))) b)
10.0ms
(- (sqrt (- (* b b) (* (* 4 a) c))) b)
2.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
2.0ms
(sqrt (- (* b b) (* (* 4 a) c)))

series218.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
66.0ms
(- (sqrt (- (* b b) (* (* 4 a) c))) b)
64.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
48.0ms
(- (sqrt (- (* b b) (* (* 4 a) c))) b)
39.0ms
(sqrt (- (* b b) (* (* 4 a) c)))

simplify1.5s

Counts
24 → 62
Calls
24 calls:
Slowest
300.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* 4 a) c) 3)))
285.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* 4 a) c) 3)))
162.0ms
(sqrt (- (* (* b b) (* b b)) (* (* (* 4 a) c) (* (* 4 a) c))))
121.0ms
(sqrt (- (* (* b b) (* b b)) (* (* (* 4 a) c) (* (* 4 a) c))))
117.0ms
(- b (* 2 (/ (* a c) b)))

prune753.0ms

Pruning

9 alts after pruning (7 fresh and 2 done)

Merged error: 5.9b

localize13.0ms

Local error

Found 4 expressions with local error:

23.1b
(sqrt (- (* b b) (* (* 4 a) c)))
23.1b
(sqrt (- (* b b) (* (* 4 a) c)))
23.1b
(sqrt (- (* b b) (* (* 4 a) c)))
1.1b
(- (sqrt (- (* b b) (* (* 4 a) c))) b)

rewrite19.0ms

Algorithm
rewrite-expression-head
Rules
10×add-sqr-sqrt
sqrt-prod
add-cube-cbrt
*-un-lft-identity
sqrt-div
add-log-exp
flip--
add-exp-log
add-cbrt-cube
flip3--
pow1
pow1/2
rem-sqrt-square
sub-neg
Counts
4 → 53
Calls
4 calls:
Slowest
13.0ms
(- (sqrt (- (* b b) (* (* 4 a) c))) b)
2.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
2.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
2.0ms
(sqrt (- (* b b) (* (* 4 a) c)))

series200.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
62.0ms
(- (sqrt (- (* b b) (* (* 4 a) c))) b)
58.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
41.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
39.0ms
(sqrt (- (* b b) (* (* 4 a) c)))

simplify2.6s

Counts
30 → 65
Calls
30 calls:
Slowest
421.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* 4 a) c) 3)))
374.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* 4 a) c) 3)))
369.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* 4 a) c) 3)))
194.0ms
(sqrt (- (* (* b b) (* b b)) (* (* (* 4 a) c) (* (* 4 a) c))))
160.0ms
(sqrt (- (* (* b b) (* b b)) (* (* (* 4 a) c) (* (* 4 a) c))))

prune893.0ms

Pruning

9 alts after pruning (6 fresh and 3 done)

Merged error: 5.9b

regimes365.0ms

Accuracy

81.3% (5.3b remaining)

Error of 10.7b against oracle of 5.5b and baseline of 33.6b

bsearch372.0ms

end0.0ms

sample4.6s

Algorithm
intervals
Results
1.4s5836×body80valid
1.2s1091×body2560valid
906.0ms910×body1280valid
435.0ms2859×body80nan
306.0ms473×body640valid
114.0ms111×body5120valid
97.0ms224×body320valid
27.0ms98×body160valid