Kiedy mnożąc liczbę zmiennoprzecinkową, która jest bardzo zbliżona do 1 z int> 0, to może nigdy być interpretowane jako 1.Czy liczbę 0.99999999999 można zaokrąglić do 1,0 podczas mnożenia?
Oznacza to, że jeśli Math.random()
zwraca jego najwyższy wynik (który jest 1 stopień poniżej 1,0) , będzie
(int)(Math.random() * 8)
być 8 lub 7?
Dla praktycznego przykładu, może to często wykorzystywane konstrukt dać indeks z błędem bounds:
someArray[(int)(Math.random() * someArray.length)];
Jestem szczególnie zainteresowany w odpowiedzi dla Java i ActionScript 3, ale przypuszczam, że wszyscy oni użyć takie same zasady dla arytmetyki zmiennoprzecinkowej i odpowiedzi dla każdej platformy byłyby użyteczne.
Aktualizacja: Chociaż ja już zaakceptowane odpowiedź, bym nadal docenić potwierdzenie, że to nie może się nie udać w ActionScript 3 albo, ponieważ zgłoszenie kolega, który widział go pomylić raz jest to, co skłoniło mnie do częściowo zadaj to pytanie.
Byłbym bardzo zaskoczony, gdyby taki numer * nigdy * przelewał do następnego int ... ale będę czekać na lepsza odpowiedź ... – bdares
@UdoFholl Nie zamierzałem używać żadnej oficjalnej notacji matematycznej, chciałem tylko wskazać liczbę z wieloma wieloma dziewięcioma. –
* Podczas pomnożenia liczby zmiennoprzecinkowej, która jest bardzo zbliżona do 1, można ją zinterpretować jako 1 * - Tak, jeśli pomnożysz ją przez 0 ;-) JK – aioobe