2012-06-14 14 views
7

Con flotadores de 32 bits, creo que hay algo así como 2^31 - 1 flotantes representables. En Java, puede tomar un flotador existente y encontrar el "próximo flotante" utilizando la biblioteca Math. Pero digamos que no tiene un flotador inicial, ¿hay alguna manera de calcular el flotante enésimo? No me importa qué idioma, si hay un idioma con una función de biblioteca lo tomaré.Calcule el N ° flotante

Por supuesto, podría simplemente poner todos los flotadores en una matriz e indexar en eso, pero eso es ineficiente en el espacio.

Aquí hay algunas aclaraciones adicionales. Podría comenzar en Float.MIN e incrementar N veces usando nextFloat, pero esto parece ineficiente porque necesito realizar esta operación muchas veces.

+2

en Java, comience en Float.MIN_VALUE. –

+0

¿Tienen que estar en orden? es decir. flotante n + 1> flotante n. ¿No es solo que quieres mapear [0..2^31) a las carrozas? – weston

+0

@CarlManaster Eso funciona pero tienes que repetir N veces para obtener la respuesta ... Estoy tratando de encontrar una manera de conectar N a la representación binaria, pero no creo que puedas. Tal vez esa es la mejor respuesta. – evanmcdonnal

Respuesta

7

Depende de cómo desee que se encarguen. Tenga en cuenta que no todas las carrozas están ordenadas en absoluto; por ejemplo, un par de NaN distintos no están ordenados (es decir, no son iguales, pero ninguno es mayor que el otro).

Si no te importa terminar con eso, puedes simplemente reinterpretar un entero como un flotador. La forma en que harías esto varía de un idioma a otro; he aquí una aplicación C:

float int_to_float(uint32_t in) { 
    union { 
     float f; 
     uint32_t i; 
    } u; 

    u.i = in; 
    return u.f; 
} 

Esto tiene la propiedad conveniente de dar resultados que ordenó su mayoría - que pasa en cero le consigue 0.0, uno te lleva 1.4e-45, 2 te lleva 2.8e-45, y por lo tanto en. Los resultados comenzarán a volverse locos una vez que ingrese a los valores NaN/Inf, y eventualmente comenzará disminuyendo una vez que llegue a 0x80000000 (-0.0), pero eso debería ser lo suficientemente bueno por ahora.

+0

¿Hay alguna forma de detectar la condición NaN? de los bits del flotador? ¿O este método siempre dará un valor flotante? –

+1

Cuando un número es NaN, los bits de exponente se establecen en 0xFF (para flotantes de precisión simple). http://en.wikipedia.org/wiki/Single-precision_floating-point_format – steveha

+0

qué respuesta más realista, espero que trabajes en un lugar agradable. Gracias. –

Cuestiones relacionadas