title: ZeroDivisionError: float division
body: <p>I have got this code to solve Newton's method. But it gives a zero division error. I cannot figure out what is wrong. Thank you.      </p>
  
  <pre><code>import copy
  
  tlist = [0.0, 0.12, 0.16, 0.2, 0.31, 0.34] # list of start time for the phonemes
  
  w = w1 = w2 = w3 = w = 5
  
  def time() :
      frame = 0.04
      for i, start_time in enumerate(tlist) :
          end_time = tlist[i]
          frame = frame * (i + 1)
          poly = poly_coeff(start_time, end_time, frame)
          Newton(poly) 
  
  def poly_coeff(stime, etime, f) :
      """The equation is k6 * u^3 + k5 * u^2 + k4 * u + k0 = 0. Computing the coefficients for this polynomial."""
      """Substituting the required values we get the coefficients."""
      t_u = f
      t0 = stime
      t3 = etime
      t1 = t2 = (stime + etime) / 2
      w0 = w1 = w2 = w3 = w
      k0 = w0 * (t_u - t0)
      k1 = w1 * (t_u - t1)
      k2 = w2 * (t_u - t2)
      k3 = w3 * (t_u - t3)
      k4 = 3 * (k1 - k0)
      k5 = 3 * (k2 - 2 * k1 + k0)
      k6 = k3 - 3 * k2 + 3 * k1 -k0 
  
      return [[k6,3], [k5,2], [k4,1], [k0,0]]
  
  def poly_differentiate(poly):
      """ Differentiate polynomial. """
      newlist = copy.deepcopy(poly)
  
      for term in newlist:
          term[0] *= term[1]
          term[1] -= 1
  
      return newlist
  
  def poly_substitute(poly, x):
      """ Apply value to polynomial. """
      sum = 0.0 
  
      for term in poly:
          sum += term[0] * (x ** term[1])
      return sum
  
  def Newton(poly):
      """ Returns a root of the polynomial"""
      poly_diff = poly_differentiate(poly) 
      counter = 0
      epsilon = 0.000000000001
  
      x = float(raw_input("Enter initial guess:"))
  
      while True:
          x_n = x - (float(poly_substitute(poly, x)) / poly_substitute(poly_diff, x))
          counter += 1
          if abs(x_n - x) &lt; epsilon :
              break
          x = x_n
      print "Number of iterations:", counter
      print "The actual root is:", x_n
      return x_n
  
  if __name__ == "__main__" :
      time()
  </code></pre>
  
  
  
  <pre><code>Enter initial guess:0.5
  Traceback (most recent call last):
    File "newton.py", line 79, in &lt;module&gt;
      time()
    File "newton.py", line 18, in time
      Newton(poly) 
    File "newton.py", line 67, in Newton
      x_n = x - (float(poly_substitute(poly, x)) / poly_substitute(poly_diff, x))
  ZeroDivisionError: float division
  </code></pre>