快速将 Double 分解为符号、尾数和指数:检查我的工作

问题描述 投票:0回答:2

我在下面的 Double 中添加了这个扩展,以便在 Swift 中将 Double 分解为整数尾数和指数。我已经测试了它的许多值,包括 DBL_MAX 和 -DBL_MAX。我的问题是: (1) 是否有内置方法或函数已经执行此操作? (2) 对于所有环境、所有双打来说,这是否正确?有什么办法可以让它失败吗? (3) 有没有办法让它更高效但仍然便携?

谢谢您的建议。

extension Double {
    func decomp () -> (mantissa:Int64,exponent:Int64) {
        var (a,b) = frexp(self)

        var exponent = Int64(b)

        while floor(a) != a {
            a *= 2
            exponent--
        }
        let mantissa = Int64(floor(a))

        return (mantissa, exponent)
    }
}
swift floating-point double
2个回答
1
投票

从 Swift 3 开始,有属性 Double.exponentDouble.significandDouble.sign.


0
投票

据我所知,这应该很容易,但它不起作用,

定义的浮点协议 https://github.com/apple/swift/blob/master/stdlib/public/core/FloatingPoint.swift.gyb,Double 结构体所遵循的浮点协议已经定义了指数和尾数变量(分别在第 207 行和第 231 行)。

Double 结构体 https://github.com/apple/swift/blob/master/stdlib/public/core/FloatingPointTypes.swift.gyb 定义第 389 行的指数和第 398 行的有效数。

© www.soinside.com 2019 - 2024. All rights reserved.