         a = Point.from(a)
         b = Point.from(b)
         a.x == b.x and a.y == b.y
-    nearlyEquals: (a, b) ->
+    approxEquals: (a, b) ->
         a = Point.from(a)
         b = Point.from(b)
-        a.x.nearlyEquals(b.x) and a.y.nearlyEquals(b.y)
+        a.x.approxEquals(b.x) and a.y.approxEquals(b.y)
     opposite: (p) ->
         p = Point.from(p)
         new Point(-p.x, -p.y)

# Many degree methods and radian methods are independent, to avoid degrees approximation.

# Useful when come across a computed value like 179.9999999. ==========[
Math.nearlyEquals = (a, b) ->
    threshold = 1 + 1 / 65536
    1 / threshold < a / b < threshold
Math.nearlyGreaterThan = (a, b) -> a > b or Math.nearlyEquals(a, b)
Math.nearlyLessThan = (a, b) -> a < b or Math.nearlyEquals(a, b)
# ========================================]
Math.radiansToDegrees = (radians) -> radians / Math.PI * 180
Math.degreesToRadians = (degrees) -> degrees / 180 * Math.PI
Math.principalRadians = (radians) ->

        "#{@x}#{sign}#{Math.abs(@y)}i"
    clone: -> new Point(@x, @y)
    equals: (p) -> cmath.equals(@, p)
    approxEquals: (p) -> cmath.approxEquals(@, p)
    opposite: -> cmath.opposite(@)
    reciprocal: -> cmath.reciprocal(@)
    conjugate: -> cmath.conjugate(@)
