¿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?

Respuestas a la pregunta(2)

Su respuesta a la pregunta