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

目前学习迅捷,有办法找到 Max价值的不同类型的 整数喜欢 Int.maxInt.min

有没有办法找到 Double 和 Float 的最大值?此外,对于这类问题,我应该参考哪个文件?我现在正在阅读苹果的 快速编程语言

61627 次浏览

While there’s no Double.max, it is defined in the C float.h header, which you can access in Swift via import Darwin.

import Darwin


let fmax = FLT_MAX
let dmax = DBL_MAX

These are roughly 3.4 * 10^38 and 1.79 * 10^308 respectively.

But bear in mind it’s not so simple with floating point numbers (it’s never simple with floating point numbers). When holding numbers this large, you lose precision in a similar way to losing precision with very small numbers, so:

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

So before you get into some calculations that might possibly brush up against these limits, you should probably read up on floating point. Here and here are probably a good start.

AV's answer is fine, but I find those macros hard to remember and a bit non-obvious, so eventually I made Double.MIN and friends work:

extension Double {
static var MIN     = -DBL_MAX
static var MAX_NEG = -DBL_MIN
static var MIN_POS =  DBL_MIN
static var MAX     =  DBL_MAX
}

Don't use lowercase min and max -- those symbols are used in Swift 3.

As of Swift 3+, you should use:

CGFloat.greatestFiniteMagnitude
Double.greatestFiniteMagnitude
Float.greatestFiniteMagnitude

Just write

let mxFloat = MAXFLOAT

You will get the maximum value of a float in Swift.

Works with 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)
}
}

Also CGFloat.infinity, Double.infinity or just .infinity can be useful in such situations.