Sono stato un po 'curioso di questo. Math.random() fornisce un valore nell'intervallo [0.0,1.0). Quindi quale potrebbe essere il valore più grande che può dare? In altre parole, qual è il doppio valore più vicino a 1.0 che è inferiore a 1.0?Java: Math.random() Valore massimo (doppio solo meno di 1)
risposta
Java utilizza 64 bit IEEE-754 rappresentazione, in modo che il numero più vicino più piccolo di uno è teoricamente 3FEFFFFFFFFFFFFF
in esadecimali, che è 0 per il segno, -1 per l'esponente e 1.9999999999999997 per il significato di 52 bit. Questo equivale a circa 0.9999999999999998
.
Riferimenti: IEEE-754 Calculator.
Il valore positivo più piccolo di un doppio è Double.MIN_NORMAL
. Quindi, il numero più grande inferiore a 1,0 è 1.0-Double.MIN_NORMAL
.
Double.MIN_NORMAL
è uguale a 2 -1022, quindi la risposta è ancora estremamente vicino a 1,0. Avresti per stampare il valore di 1.0-Double.MIN_NORMAL
a 308 cifre decimali prima di poter vedere tutto tranne che un 9.
Dispari, quando encase '1.0 - Double.MIN_NORMAL == 1.0' in un System.out.println, ottengo vero. Ma quando incoraggio 0.999999999999999999 in System.out.println, ottengo il falso. Quindi vuol dire che 0.9999999999999999 è il doppio più vicino a uno? – Justin
Hum ... No, quindi, MIN_NORMAL si applica al valore _closest su zero_ È di genere il più piccolo errore possibile sui valori IEEE-754. Ma dal momento che ti sei mosso verso l'1, parte della precisione si perde! – mjv
'System.out.println (Double.MinNormal)' fornisce 2.2250738585072014E-308. Piuttosto piccolo. – Justin
Il numero che si desidera viene restituito da Math.nextAfter(1.0, -1.0)
.
Il nome della funzione è un po 'improprio. Math.nextAfter(a, 1.0)
restituisce il valore minimo doppia che è maggiore di a
(cioè, il successivo valore dopo a
), e Math.nextAfter(a, -1.0)
restituisce il massimo valore che è inferiore a
(cioè, il valore primaa
).
Nota: un altro poster ha dichiarato: 1.0-Double.MIN_NORMAL
. È sbagliato. 1.0-Double.MIN_NORMAL
è esattamente uguale a 1.0.
- 1. Genera e concatena 3 valori Math.random() più casuali di 1 valore Math.random()?
- 2. Ottenere un doppio valore casuale tra -1 e 1
- 3. Math.floor (Math.random()) cosa fa effettivamente +1?
- 4. Sementi casuali Math.random in Java
- 5. Valore doppio con precisione specifica in java
- 6. Haskell minimo/massimo Doppio costante
- 7. Javascript: Math.random
- 8. Data meno 1 anno?
- 9. Perché int32 ha valore massimo 2^31 -1
- 10. Permetti solo 1 valore per tasto premere
- 11. Valore massimo di unsigned char
- 12. Java ExecuteBatch() inserisce solo 1 riga
- 13. JS: Math.random per array
- 14. Numero massimo di cifre decimali che possono influenzare un doppio
- 15. precisione di Math.random()
- 16. Trovare il valore massimo massimo di scrollTop su un div?
- 17. Math.random() ha spiegato
- 18. Verificare se un doppio = 1/3
- 19. Java: doppio valore del formato come importo in dollari
- 20. Unario meno cambia solo segno?
- 21. z-index valore massimo
- 22. Distinguere tra un solo clic e doppio clic in Java
- 23. convertire il valore doppio in valore binario
- 24. Il doppio meno di meno il segno "<< -" significa qualcosa in rubino?
- 25. Scanner valore doppio - InputMismatchException
- 26. Valore massimo dei francobolli su una busta
- 27. Qual è il valore massimo per Java Durata
- 28. Seleziona il limite massimo 1 dal gruppo
- 29. Calcolo del valore massimo dell'istogramma
- 30. Jmeter Counter reinizializzazione valore massimo
Che dire di 0.999999999999999999? ha lo stesso numero di cifre, ma ha un 9 invece di un 8 alla fine. Quando ho 'System.out.println (0,999999999999999999 - 0,9999999999999998)', ottengo: 1.1102230246251565E-16 – Justin
@gangqinlaohu L'ultima cifra non è precisa. Ho troncato il numero ottenuto dalla calcolatrice IEEE-754 (vedi il link nella risposta) per ottenere il numero. La cifra successiva dopo 8 è anche 8, quindi se si applica l'arrotondamento, il risultato diventa 0,9999,99999999999. – dasblinkenlight
Oh, quindi 0.9999999999999999 è più vicino di 0.9999999999999998, perché 0.9999999999999998 viene troncato, quindi il doppio più vicino a 1 è 0.9999999999999999. – Justin