     }
 }
 
-extension FloatingPoint where Self:ComplexElement {
+extension FloatingPoint where Self:ComplexFloatElement {
     public var i:Complex<Self> {
         return Complex(0, self)
     }

    public static func lgamma(_ x:Element)->Self { return Self(Element.lgamma(x)) }
}

public typealias ComplexElement = FloatingPoint & FloatingPointMath

public struct Complex<R:ComplexElement> : ComplexFloat  {
    public typealias NumericType = R
    public var (real, imag):(R, R)
    public init(real r:R, imag i:R) {


import FloatingPointMath

public typealias ComplexFloatElement = FloatingPoint & FloatingPointMath

public protocol ComplexFloat : ComplexNumeric & CustomStringConvertible
    where Element: ComplexFloatElement {
}


extension ComplexFloat {
    ///
