如何在 Swift 中找到 Double 和 Float 的最大值
How to find max value for Double and Float in Swift
当前学习 Swift,有多种方法可以找到 max 和 min 不同种类 的值]Integer 像 Int.max
和 Int.min
。
有没有办法找到 Double 和 Float 的最大值?另外,这种问题应该参考哪个文件?我目前正在阅读 Apple 的 Swift 编程语言。
虽然没有 Double.max
,但它在 C float.h
header 中定义,您可以通过 import Darwin
在 Swift 中访问它。
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 and here 可能是一个好的开始。
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.
从 Swift 3+ 开始,您应该使用:
CGFloat.greatestFiniteMagnitude
Double.greatestFiniteMagnitude
Float.greatestFiniteMagnitude
随便写
let mxFloat = MAXFLOAT
您将在 swift 中获得 float 的最大值。
全部使用 swift 5.
适用于 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)
}
}
在这种情况下,CGFloat.infinity
、Double.infinity
或 .infinity
也很有用。
当前学习 Swift,有多种方法可以找到 max 和 min 不同种类 的值]Integer 像 Int.max
和 Int.min
。
有没有办法找到 Double 和 Float 的最大值?另外,这种问题应该参考哪个文件?我目前正在阅读 Apple 的 Swift 编程语言。
虽然没有 Double.max
,但它在 C float.h
header 中定义,您可以通过 import Darwin
在 Swift 中访问它。
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 and here 可能是一个好的开始。
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.
从 Swift 3+ 开始,您应该使用:
CGFloat.greatestFiniteMagnitude
Double.greatestFiniteMagnitude
Float.greatestFiniteMagnitude
随便写
let mxFloat = MAXFLOAT
您将在 swift 中获得 float 的最大值。
全部使用 swift 5.
适用于 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)
}
}
在这种情况下,CGFloat.infinity
、Double.infinity
或 .infinity
也很有用。