当前正在学习Swift,有多种方法可以找到不同类型的Integer(例如和)的最大值和最小值。Int.max
Int.min
有没有一种方法可以找到Double和Float的最大值?此外,对于此类问题,我应该参考哪个文件?我目前正在阅读Apple的The Swift Programming Language。
Answers:
虽然没有Double.max
,但它在Cfloat.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
(+infinity)
Double和Float的340,282,346,638,529,000,000,000,000,000,000,000,000,000,000.0。为什么Double和Int64都具有64位,但是double可以存储更多数字?
Double.greatestFiniteMagnitude
与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)
}
}