如何在 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 找到 max 和 min 值,例如 Int.max
和 Int.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^38
和1.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.infinity
、Double.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 的最大值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用在 Swift 中返回 MultiArray(Double) 的模型进行预测
如何使用 Alamofire 和 Swift Decode 从 JSON 解码和访问 Double