         )
     }
     public static func cos(_ x:Element)->Self { return cos(Self(x)) }
-    /// - returns: sine of z in Complex
+    /// sine of z in Complex
     public static func sin(_ z:Self) -> Self {
         return Self(
             +Element.sin(z.real) * Element.cosh(z.imag),

        return Self(r, z.imag.sign == .minus ? -i : i)
    }
    public static func sqrt(_ x:Element)->Self { return sqrt(Self(x)) }
    /// - returns: e ** z in Complex
    public static func exp(_ z:Self)->Self {
        let r = Element.exp(z.real)
        let a = z.imag
        return Self(r * Element.cos(a), r * Element.sin(a))
    }
    public static func exp(_ x:Element)->Self { return Self(Element.exp(x)) }
    /// - returns: e ** z - 1.0 in Complex
    /// cf. https://lists.gnu.org/archive/html/octave-maintainers/2008-03/msg00174.html
    public static func expm1(_ z:Self)->Self {
        return -exp(z/2) * 2 * sin(z.i/2).i
    }
    public static func expm1(_ x:Element)->Self { return Self(Element.expm1(x)) }
    /// - returns: natural log of z in Complex
    public static func log(_ z:Self)->Self {
        return Self(Element.log(z.abs), z.arg)
    }
    public static func log(_ x:Element)->Self { return log(Self(x)) }
    /// - returns: natural log of (z + 1) in Complex
    public static func log1p(_ z:Self)->Self {
        return 2*atanh(z/(z+2))
    }
    public static func log1p(_ x:Element)->Self { return Self(Element.log1p(x)) }
    /// - returns: base 2 log of z in Complex
    public static func log2(_ z:Self)->Self {
        return log(z) / Element.log(2)
    }
    public static func log2(_ x:Element)->Self { return log2(Self(x)) }
    /// - returns: base 10 log of z in Complex
    public static func log10(_ z:Self)->Self {
        return log(z) / Element.log(10)
    }
    public static func log10(_ x:Element)->Self { return log10(Self(x)) }
    /// - returns: lhs ** rhs in Complex
    public static func pow(_ lhs:Self, _ rhs:Self)->Self {
        return exp(log(lhs) * rhs)
    }
    public static func pow(_ lhs:Self, _ rhs:Element)->Self { return pow(lhs, Self(rhs)) }
    public static func pow(_ lhs:Element, _ rhs:Self)->Self { return pow(Self(lhs), rhs) }
    public static func pow(_ lhs:Element, _ rhs:Element)->Self { return Self(Element.pow(lhs, rhs)) }
    /// - returns: cosine of z in Complex
    public static func cos(_ z:Self) -> Self {
        return Self(
            +Element.cos(z.real) * Element.cosh(z.imag),

            (real, imag) = (real * r, imag * r)
        }
    }
    /// magnitude = abs
    public var magnitude:Element {
        return self.abs
    }
    /// argument
    public var arg:Element  {
        get { return Element.atan2(imag, real) }
