Después de consultar con expertos en este tema, programadores de varias áreas y profesores hemos dado con la solución a la interrogande y la compartimos en esta publicación.
Solución:
A partir de Swift 3+, debe usar:
CGFloat.greatestFiniteMagnitude
Double.greatestFiniteMagnitude
Float.greatestFiniteMagnitude
mientras no hay Double.max
se define en la C float.h
encabezado, al que puede acceder en Swift a través de import Darwin
.
import Darwin
let fmax = FLT_MAX
let dmax = DBL_MAX
Estos son aproximadamente 3.4 * 10^38
y 1.79 * 10^308
respectivamente.
Pero tenga en cuenta que no es tan simple con números de punto flotante (nunca es simple con números de punto flotante). Cuando mantienes números tan grandes, pierdes precisión de manera similar a perder precisión con números muy pequeños, entonces:
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
Entonces, antes de entrar en algunos cálculos que posiblemente podrían repasar estos límites, probablemente debería leer sobre el punto flotante. Aquí y aquí son probablemente un buen comienzo.
La respuesta de AV está bien, pero encuentro que esas macros son difíciles de recordar y un poco no obvias, así que finalmente hice Double.MIN
y amigos trabajan:
extension Double
static var MIN = -DBL_MAX
static var MAX_NEG = -DBL_MIN
static var MIN_POS = DBL_MIN
static var MAX = DBL_MAX
No use minúsculas min y max; esos símbolos se usan en Swift 3.