Quando moltiplicare un numero a virgola mobile che è molto vicino a 1 int> 0, può mai essere interpretato come 1.È possibile arrotondare a 0,99999999999 a 1,0 quando si moltiplica?
Cioè, se Math.random()
restituisce il suo massimo risultato possibile (che è 1 gradino sotto 1.0) ,
(int)(Math.random() * 8)
essere 8 o 7?
Per un esempio pratico, può questo costrutto spesso usato dare un indice di errore di limiti:
someArray[(int)(Math.random() * someArray.length)];
Sono specificamente interessati a risposte per Java e ActionScript 3, ma suppongo che tutti usano il stesse regole per l'aritmetica in virgola mobile e le risposte per qualsiasi piattaforma sarebbero utili.
Aggiornamento: Anche se ho già accettato una risposta, sarei ancora apprezzare la conferma che questo non si può sbagliare in ActionScript 3, giacché la segnalazione di un collega che lo vide andare male una volta che è ciò che in parte mi ha spinto a fai questa domanda
Sarei abbastanza sorpreso se un tale numero * mai * straripato nella prossima int ... ma io ti aspetterò un risposta migliore ... – bdares
@UdoFholl Non intendevo usare alcuna notazione matematica ufficiale, volevo solo indicare un numero con molti molti nove. –
* Quando si moltiplica un numero mobile molto vicino a 1, può mai essere interpretato come 1 * - Sì, se lo si moltiplica per 0 ;-) JK – aioobe