¿Por qué Int (Float (Int.max)) me da un error?
Observé algo realmente extraño. Si ejecuta este código en Swift:
Int(Float(Int.max))
Se bloquea con el mensaje de error:
error fatal: el valor flotante no se puede convertir a Int porque el resultado sería mayor que Int.max
Esto es realmente contra-intuitivo, así que amplié la expresión en 3 líneas e intenté ver qué sucede en cada paso en un patio de recreo:
let a = Int.max
let b = Float(a)
let c = Int(b)
Se bloquea con el mismo mensaje. Esta vez, veo quea
es 9223372036854775807 yb
es 9.223372e + 18. Eso es obvioa
es mayor queb
por 36854775807. También entiendo que los puntos flotantes son inexactos, por lo que esperaba algo menos queInt.max
, con los últimos dígitos siendo 0.
También probé esto conDouble
, también se bloquea.
Entonces pensé, tal vez así es como se comportan los números de coma flotante, así que probé lo mismo en Java:
long a = Long.MAX_VALUE;
float b = (float)a;
long c = (long)b;
System.out.println(c);
¡Imprime el esperado 9223372036854775807!
¿Qué hay de malo con Swift?