Aktuelles Lernen Swift, es gibt Möglichkeiten, Max- und Min- Werte für verschiedene Arten von Ganzzahlen wie Int.max
und zu finden Int.min
.
Gibt es eine Möglichkeit, den Maximalwert für Double und Float zu ermitteln? Welches Dokument sollte ich für diese Art von Frage verwenden? Ich lese gerade Apples The Swift Programming Language .
Während es keine gibt
Double.max
, ist es im C-float.h
Header definiert, auf den Sie in Swift über zugreifen könnenimport Darwin
.import Darwin let fmax = FLT_MAX let dmax = DBL_MAX
Dies sind grob
3.4 * 10^38
und1.79 * 10^308
jeweils.Aber denken Sie daran, dass es mit Gleitkommazahlen nicht so einfach ist (mit Gleitkommazahlen ist es nie so einfach). Wenn Sie so große Zahlen halten, verlieren Sie die Genauigkeit auf ähnliche Weise wie bei sehr kleinen Zahlen.
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
Bevor Sie sich also mit Berechnungen befassen, die möglicherweise diese Grenzen überschreiten, sollten Sie sich wahrscheinlich über Gleitkomma informieren. Hier und hier sind wohl ein guter Anfang.
quelle
(+infinity)
für Double und 340.282.346.638.529.000.000.000.000.000.000.000.000.000 für Float. Warum haben Double und Int64 beide 64 Bit, aber Double kann mehr Zahlen speichern?Double.greatestFiniteMagnitude
Die Antwort von AV ist in Ordnung, aber ich finde diese Makros schwer zu merken und ein bisschen nicht offensichtlich, also habe ich schließlich dafür gesorgt, dass
Double.MIN
Freunde arbeiten:extension Double { static var MIN = -DBL_MAX static var MAX_NEG = -DBL_MIN static var MIN_POS = DBL_MIN static var MAX = DBL_MAX }
Verwenden Sie keine Klein- und Kleinbuchstaben - diese Symbole werden in Swift 3 verwendet.
quelle
Einfach schreiben
let mxFloat = MAXFLOAT
Sie erhalten den Maximalwert von float in swif.
quelle
Alle mit Swift 5.
quelle
Auch
CGFloat.infinity
,Double.infinity
oder gerade.infinity
in solchen Situationen nützlich sein.quelle
Funktioniert mit 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) } }
quelle