How to find max value for Double and Float in Swift
Solution 1
As of Swift 3+, you should use:
CGFloat.greatestFiniteMagnitude
Double.greatestFiniteMagnitude
Float.greatestFiniteMagnitude
Solution 2
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.
Solution 3
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.
Solution 4
Just Write
let mxFloat = MAXFLOAT
You will get maximum value of float in swif.
Solution 5
All of them with using swift 5.
X.Creates
Updated on July 23, 2020Comments
-
X.Creates almost 4 years
Current learning Swift, there are ways to find max and min value for different kind of Integer like
Int.max
andInt.min
.Is there a way to find max value for Double and Float? Moreover, which document should I refer for this kind of question? I am currently reading Apple's The Swift Programming Language.
-
X.Creates about 9 yearsI am try you code in Xcode playground and get
(+infinity)
for Double and 340,282,346,638,529,000,000,000,000,000,000,000,000.0 for Float. Why Double and Int64 both have 64bit but double can store more numbers? -
Airspeed Velocity about 9 yearsYou need to learn about floating point representation. Start with the wikipedia article and also this intro
-
Jarrod Smith over 8 yearsFor the common case of using max/min values with comparison operators DBL_MAX will always give valid results.
-
John Montgomery about 7 yearsDeprecated in Swift 3, it's now
Double.greatestFiniteMagnitude
-
Mike Pollard over 6 yearsThis will not compile on linux
-
Mike Pollard over 6 yearsThis is the answer if you are interested in your code compiling on Linux too.