Lor*_*lor 64 floating-point double int infinity swift
当前的学习斯威夫特,有办法找到最大和最小的别样的价值整数像Int.max和Int.min.
有没有办法找到Double和Float的最大值?此外,我应该针对这类问题提及哪一份文件?我目前正在阅读Apple的The Swift Programming Language.
Vad*_*off 130
从Swift 3开始,你应该使用:
CGFloat.greatestFiniteMagnitude
Double.greatestFiniteMagnitude
Float.greatestFiniteMagnitude
Run Code Online (Sandbox Code Playgroud)
Air*_*ity 70
虽然没有Double.max,但它在C float.h头中定义,您可以在Swift中访问它import Darwin.
import Darwin
let fmax = FLT_MAX
let dmax = DBL_MAX
Run Code Online (Sandbox Code Playgroud)
这些都是大致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
Run Code Online (Sandbox Code Playgroud)
因此,在进入一些可能会超出这些限制的计算之前,您应该阅读浮点数. 这里和这里可能是个好的开始.
Ami*_*ico 11
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
}
Run Code Online (Sandbox Code Playgroud)
不要使用小写的最小值和最大值 - 这些符号在Swift 3中使用.