Espero que el código a continuación cubra el rango completo de Float del cual uso solo una parte muy pequeña justo por encima de 0.
Sin embargo, mi aplicación a veces falla en el campo porque llega al default: fatalError() .
¿Qué podría estar mal aquí?
var value: Float // Between a little above 0 and about 15. ... switch value { case ...3: return 0 case 3...10: return 1 case 10...: return 2 default: fatalError() }Este cambio estará completamente predeterminado, por ejemplo, si el valor es Float.nan o Float.signalingNaN , por lo que es técnicamente posible que la aplicación se bloquee legítimamente en ese punto.
Considere agregar algo de registro antes de fallar para verificar qué valor hace que se bloquee.
Ha cubierto todos los casos excepto los valores cuyos ocho bits de exponente son todos 1. Ninguno de estos es "Entre un poco por encima de 0 y alrededor de 15", por lo que su suposición actualmente es incorrecta.
https://en.wikipedia.org/wiki/Single-precision_floating-point_format#Exponent_encoding