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

Posted

技术标签:

【中文标题】如何在 Swift 中找到 Double 和 Float 的最大值【英文标题】:How to find max value for Double and Float in Swift 【发布时间】:2015-04-16 00:32:56 【问题描述】:

目前正在学习 Swift,有一些方法可以为不同类型的 Integer 找到 maxmin 值,例如 Int.maxInt.min .

有没有办法找到 Double 和 Float 的最大值?此外,对于此类问题,我应该参考哪个文件?我目前正在阅读 Apple 的 The Swift Programming Language

【问题讨论】:

【参考方案1】:

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

CGFloat.greatestFiniteMagnitude
Double.greatestFiniteMagnitude
Float.greatestFiniteMagnitude

【讨论】:

如果您也对在 Linux 上编译代码感兴趣,这就是答案。【参考方案2】:

虽然没有 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

因此,在您进行一些可能违反这些限制的计算之前,您可能应该阅读浮点数。 Here 和 here 可能是一个好的开始。

【讨论】:

我尝试在 Xcode 操场上编写代码,并为 Double 获取 (+infinity),为 Float 获取 340,282,346,638,529,000,000,000,000,000,000,000,000.0。为什么 Double 和 Int64 都是 64 位的,而 double 可以存储更多的数字? 你需要了解浮点表示。从wikipedia article 和this intro 开始 对于将最大值/最小值与比较运算符一起使用的常见情况,DBL_MAX 将始终给出有效结果。 在 Swift 3 中已弃用,现在是 Double.greatestFiniteMagnitude【参考方案3】:

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 中使用。

【讨论】:

【参考方案4】:

随便写

    let mxFloat = MAXFLOAT

你会在 swif 中得到最大的 float 值。

【讨论】:

这不会在 linux 上编译【参考方案5】:

所有这些都使用 swift 5。

【讨论】:

【参考方案6】:

CGFloat.infinityDouble.infinity.infinity 在这种情况下也很有用。

【讨论】:

【参考方案7】:

适用于 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)
    

【讨论】:

以上是关于如何在 Swift 中找到 Double 和 Float 的最大值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 vDSP 集成到 Swift

如何使用在 Swift 中返回 MultiArray(Double) 的模型进行预测

如何使用 Alamofire 和 Swift Decode 从 JSON 解码和访问 Double

如何在swift中将数字附加到double

如何使用 Swift 在 xCode 中将 textField 的字符串转换为 Double [重复]

如何使用 Swift 将 Int of Array 值转换为 Double [关闭]