如何在Swift中查找Double和Float的最大值

lf3rwulv  于 2022-11-21  发布在  Swift
关注(0)|答案(6)|浏览(113)

当前学习Swift时,有多种方法可以找到不同类型Integer(如Int.maxInt.min)的 maxmin 值。
有没有办法找到Double和Float的最大值?另外,我应该参考哪篇文档来解决这类问题?我目前正在阅读Apple的The Swift Programming Language

ef1yzkbh

ef1yzkbh1#

从Swift 3+开始,您应该用途:

CGFloat.greatestFiniteMagnitude
Double.greatestFiniteMagnitude
Float.greatestFiniteMagnitude
pb3s4cty

pb3s4cty2#

虽然没有Double.max,但它是在C float.h头文件中定义的,您可以在Swift中通过import Darwin访问它。

import Darwin

let fmax = FLT_MAX
let dmax = DBL_MAX

它们大致分别为3.4 * 10^381.79 * 10^308
但请记住,浮点数的计算并不简单(浮点数的计算从来都不简单)。当计算这么大的数字时,精度的损失与计算非常小的数字时精度的损失类似,因此:

let d = DBL_MAX
let e = d - 1.0
let diff = d - e
diff == 0.0  // true

let maxPlusOne = DBL_MAX + 1
maxPlusOne == d  // true

let inf = DBL_MAX * 2
// perhaps infinity is the “maximum” 
inf == Double.infinity  // true

因此,在进行一些可能会碰到这些限制的计算之前,您可能应该阅读一下浮点。Herehere可能是一个很好的开始。

3zwtqj6y

3zwtqj6y3#

AV的答案很好,但我发现这些宏很难记住,而且有点不明显,所以最终我让Double.MIN和朋友们工作:

extension Double {
    static var MIN     = -DBL_MAX
    static var MAX_NEG = -DBL_MIN
    static var MIN_POS =  DBL_MIN
    static var MAX     =  DBL_MAX
}

不要使用小写的min和max --这些符号在Swift 3中使用。

lh80um4z

lh80um4z4#

就写

let mxFloat = MAXFLOAT

您将获得Swift中浮点数的最大值。

6xfqseft

6xfqseft5#

CGFloat.infinityDouble.infinity或仅.infinity在这种情况下也是有用的。

uoifb46i

uoifb46i6#

swift 5配合使用

public extension Double {

    /// Max double value.
    static var max: Double {
        return Double(greatestFiniteMagnitude)
    }

    /// Min double value.
    static var min: Double {
        return Double(-greatestFiniteMagnitude)
    }
}

相关问题