 
 // override == to introduce NaN
 extension BigFloat {
+    public func isIdentical(to other:BigFloat)->Bool {
+        return self.scale == other.scale && self.mantissa == other.mantissa
+    }
     public func isEqual(to other:BigFloat)->Bool {
-        return !self.isNaN && !other.isNaN
-            && self.scale == other.scale
-            && self.mantissa == other.mantissa
+        return self.isNaN || other.isNaN ? false
+            :  self.isZero ? other.isZero
+            :  self.isIdentical(to: other)
     }
     public static func ==(_ lhs:BigFloat, _ rhs:BigFloat)->Bool {
         return lhs.isEqual(to:rhs)

            :    scale  < 0 ? .minus : .plus    // ±0 and inifinity
    }
    public mutating func negate() {
        if Swift.abs(scale) == Int.max {
            scale.negate()
        }
        else if mantissa == 0 {

    public static func +(_ lhs:BigFloat, _ rhs:BigFloat)->BigFloat {
        return nan
    }
    public func isLess(than other:BigFloat)->Bool {
        return BigRat(self).isLess(than: BigRat(other))
        if self.isEqual(to: other) { return false }
        if self.isNaN || other.isNaN { return false }
        if self.isInfinite {
            return self.sign == .minus
        }
        if other.isInfinite {
            return other.sign == .plus
        }
        if self.exponent < other.exponent {
            return self.sign == .plus
        }
        return self.significand.mantissa < other.significand.mantissa
    }
    public static func <(_ lhs:BigFloat, _ rhs:BigFloat)->Bool {
        return lhs.isLess(than:rhs)
