How to find max value for Double and Float in Swift

56,485

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.

enter image description here

Share:
56,485
X.Creates
Author by

X.Creates

Updated on July 23, 2020

Comments

  • X.Creates
    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 and Int.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
    X.Creates about 9 years
    I 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
    Airspeed Velocity about 9 years
    You need to learn about floating point representation. Start with the wikipedia article and also this intro
  • Jarrod Smith
    Jarrod Smith over 8 years
    For the common case of using max/min values with comparison operators DBL_MAX will always give valid results.
  • John Montgomery
    John Montgomery about 7 years
    Deprecated in Swift 3, it's now Double.greatestFiniteMagnitude
  • Mike Pollard
    Mike Pollard over 6 years
    This will not compile on linux
  • Mike Pollard
    Mike Pollard over 6 years
    This is the answer if you are interested in your code compiling on Linux too.