 @_exported import Foundation // Clang module
 import _SwiftCoreFoundationOverlayShims
 
-// The methods in this extension exist to match the protocol requirements of FloatinPoint, even if we can't conform directly.
-// If it becomes clear that conformance is truly impossible, we can deprecate some of the methods (e.g. isEqual(to:)) in favor of operators.
 extension Decimal {
     public typealias RoundingMode = NSDecimalNumber.RoundingMode
     public typealias CalculationError = NSDecimalNumber.CalculationError
-
-    public static let leastFiniteMagnitude = Decimal(
-        _exponent: 127,
-        _length: 8,
-        _isNegative: 1,
-        _isCompact: 1,
-        _reserved: 0,
-        _mantissa: (0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)
-    )
-    public static let greatestFiniteMagnitude = Decimal(
-        _exponent: 127,
-        _length: 8,
-        _isNegative: 0,
-        _isCompact: 1,
-        _reserved: 0,
-        _mantissa: (0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)
-    )
-    public static let leastNormalMagnitude = Decimal(
-        _exponent: -127,
-        _length: 1,
-        _isNegative: 0,
-        _isCompact: 1,
-        _reserved: 0,
-        _mantissa: (0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000)
-    )
-    public static let leastNonzeroMagnitude = Decimal(
-        _exponent: -127,
-        _length: 1,
-        _isNegative: 0,
-        _isCompact: 1,
-        _reserved: 0,
-        _mantissa: (0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000)
-    )
-    public static let pi = Decimal(
-        _exponent: -38,
-        _length: 8,
-        _isNegative: 0,
-        _isCompact: 1,
-        _reserved: 0,
-        _mantissa: (0x6623, 0x7d57, 0x16e7, 0xad0d, 0xaf52, 0x4641, 0xdfa7, 0xec58)
-    )
-
-    public var exponent: Int { 
-        get {
-            return Int(_exponent)
-        }
-    }
-
-    public var significand: Decimal { 
-        get {
-            return Decimal(_exponent: 0, _length: _length, _isNegative: _isNegative, _isCompact: _isCompact, _reserved: 0, _mantissa: _mantissa)
-        }
-    }
-
-    public init(sign: FloatingPointSign, exponent: Int, significand: Decimal) {
-        self.init(_exponent: Int32(exponent) + significand._exponent, _length: significand._length, _isNegative: sign == .plus ? 0 : 1, _isCompact: significand._isCompact, _reserved: 0, _mantissa: significand._mantissa)
-    }
-
-    public init(signOf: Decimal, magnitudeOf magnitude: Decimal) {
-        self.init(_exponent: magnitude._exponent, _length: magnitude._length, _isNegative: signOf._isNegative, _isCompact: magnitude._isCompact, _reserved: 0, _mantissa: magnitude._mantissa)
-    }
-
-    public var sign: FloatingPointSign { 
-        return _isNegative == 0 ? FloatingPointSign.plus : FloatingPointSign.minus
-    }
-
-    public static var radix: Int { return 10 }
-
-    public var ulp: Decimal {
-        if !self.isFinite { return Decimal.nan }
-        return Decimal(_exponent: _exponent, _length: 8, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000))
-    }
-
-    @available(*, unavailable, message: "Decimal does not yet fully adopt FloatingPoint.")
-    public mutating func formTruncatingRemainder(dividingBy other: Decimal) { fatalError("Decimal does not yet fully adopt FloatingPoint") }
-
-    public func isEqual(to other: Decimal) -> Bool {
-        var lhs = self
-        var rhs = other
-        return NSDecimalCompare(&lhs, &rhs) == .orderedSame
-    }
-
-    public func isLess(than other: Decimal) -> Bool {
-        var lhs = self
-        var rhs = other
-        return NSDecimalCompare(&lhs, &rhs) == .orderedAscending
-    }
-
-    public func isLessThanOrEqualTo(_ other: Decimal) -> Bool {
-        var lhs = self
-        var rhs = other
-        let order = NSDecimalCompare(&lhs, &rhs)
-        return order == .orderedAscending || order == .orderedSame
-    }
-
-    public func isTotallyOrdered(belowOrEqualTo other: Decimal) -> Bool {
-        // Notes: Decimal does not have -0 or infinities to worry about
-        if self.isNaN {
-            return false
-        } else if self < other {
-            return true
-        } else if other < self {
-            return false
-        }
-        // fall through to == behavior
-        return true
-    }
-
-    public var isCanonical: Bool {
-        return true
-    }
-
-    public var nextUp: Decimal {
-        return self + Decimal(_exponent: _exponent, _length: 1, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000))
-    }
-
-    public var nextDown: Decimal {
-        return self - Decimal(_exponent: _exponent, _length: 1, _isNegative: 0, _isCompact: 1, _reserved: 0, _mantissa: (0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000))
-    }
 }
 
 public func pow(_ x: Decimal, _ y: Int) -> Decimal {
-    var res = Decimal()
-    var num = x
-    NSDecimalPower(&res, &num, y, .plain)
-    return res
+    var x = x
+    var result = Decimal()
+    NSDecimalPower(&result, &x, y, .plain)
+    return result
 }
 
 extension Decimal : Hashable, Comparable {

    public init(_ value: Int32) {
        self.init(Int64(value))
    }
    
    public init(_ value: Double) {
        precondition(!value.isInfinite, "Decimal does not yet fully adopt FloatingPoint")
        if value.isNaN {

                exponent += 1
            }
            var mantissa = UInt64(val)

            var i: UInt32 = 0
            // This is a bit ugly but it is the closest approximation of the C
            // initializer that can be expressed here.
