     }
 }
 
-extension BinaryFixedPoint {
+extension BinaryFixedPoint where RepresentingValue.RawSignificand : FixedWidthInteger {
     
     @_versioned
     @_inlineable
     static var _fractionOffset: Int {
         return Self.fractionalBitCount - RepresentingValue.significandBitCount
+    }
+    
+    @_versioned
+    @_inlineable
+    static var _exponentBias: Int {
+        let s = RepresentingValue.exponentBitCount - 1
+        return (1 << s) - 1
     }
     
     @_inlineable

//  THE SOFTWARE.
//

public protocol BinaryFixedPoint : Numeric, Hashable, CustomStringConvertible, ExpressibleByFloatLiteral where RepresentingValue.RawSignificand : FixedWidthInteger {
    
    associatedtype BitPattern : FixedWidthInteger
    

                return 0
            } else {
                let _bitPattern = RepresentingValue.RawSignificand(bitPattern < 0 ? 0 - bitPattern : bitPattern)
                let exponent = Int(log2(_bitPattern)) - Self.fractionalBitCount
                let offset = Self._fractionOffset + exponent
                let exponentBitPattern = RepresentingValue.RawExponent(Self._exponentBias + exponent)
                let significandBitMask: RepresentingValue.RawSignificand = (1 << RepresentingValue.significandBitCount) - 1
                let significandBitPattern = (_bitPattern >> offset) & significandBitMask
                if BitPattern.isSigned {
                    return RepresentingValue(sign: bitPattern < 0 ? .minus : .plus, exponentBitPattern: exponentBitPattern, significandBitPattern: significandBitPattern)
                } else {
