Al multiplicar un número de coma flotante que está muy cerca de 1 con un int> 0, puede jamás interpretarse como 1.¿Puede 0.99999999999 redondearse a 1.0 al multiplicar?
Es decir, si Math.random()
devuelve su resultado más alto posible (que es 1 paso por debajo de 1,0) , será
(int)(Math.random() * 8)
ser 8 o 7?
Para un ejemplo práctico, esta construcción puede uso frecuente dar un índice de error de límites:
someArray[(int)(Math.random() * someArray.length)];
Estoy especialmente interesado en las respuestas de Java y ActionScript 3, pero supongo que todos ellos utilizan la las mismas reglas para la aritmética de coma flotante, y las respuestas para cualquier plataforma serían útiles.
Actualización: A pesar de que ya se aceptó una respuesta, yo todavía aprecio confirmación de que esto no puede ir mal en ActionScript 3 tampoco, ya que un colega informando que lo vio salir mal una vez que es lo que me impulsó a parte haz esta pregunta
Estaría muy sorprendido si un número tan * * Nunca se desbordó en la siguiente int ... pero voy a esperar a una mejor respuesta ... – bdares
@UdoFholl No tenía la intención de utilizar ninguna notación matemática oficial, solo quería indicar un número con muchas nueves. –
* Al multiplicar un número flotante que está muy cerca de 1, ¿puede interpretarse alguna vez como 1 *? Sí, si lo multiplicas por 0 ;-) JK – aioobe