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

时间:2015-02-15 11:15:58

标签: swift floating-point int double infinity

目前的学习Swift,有很多方法可以找到整数 min 的值,用于{strong>整数,例如Int.max和{ {1}}。

有没有办法找到Double和Float的最大值?此外,我应该针对这类问题提及哪一份文件?我目前正在阅读Apple的 The Swift Programming Language

7 个答案:

答案 0 :(得分:116)

从Swift 3开始,你应该使用:

CGFloat.greatestFiniteMagnitude
Double.greatestFiniteMagnitude
Float.greatestFiniteMagnitude

答案 1 :(得分:64)

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

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可能是一个好的开始。

答案 2 :(得分:10)

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
}

不要使用小写的最小值和最大值 - 这些符号在Swift 3中使用。

答案 3 :(得分:6)

刚写

    let mxFloat = MAXFLOAT

你将获得swif中float的最大值。

答案 4 :(得分:3)

所有这些都使用swift5。

{{3}}

答案 5 :(得分:2)

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

答案 6 :(得分:1)

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)
    }
}