def double
      return self if infinity?
      gamma = field.mod((3 * x * x + @group.param_a) * field.inverse(2 * y))
      new_x = field.mod(gamma * gamma - 2 * x)
      new_y = field.mod(gamma * (x - new_x) - y)
      self.class.new(group, new_x, new_y)
    end
def double
      return self if infinity?
      gamma = field.mod((3 * x * x + @group.param_a) * field.inverse(2 * y))
      new_x = field.mod(gamma * gamma - 2 * x)
      new_y = field.mod(gamma * (x - new_x) - y)
      self.class.new(group, new_x, new_y)
    end
Returns the point added to itself.

 This algorithm is defined in
 [SEC1](http://www.secg.org/collateral/sec1_final.pdf), Section 2.2.1,
 Rule 5.

 @return (Point)