quando utilizziamo la funzione MIN_VALUE su uno dei tipi primitivi in java ci fornisce il valore minimo possibile per quel tipo. MA in caso di float e doppio restituisce valore minimo positivo anche se float e double possono avere anche valori negativi.il valore minimo di float in java è positivo perché?
risposta
valore min del galleggiante in java è positivo perché?
Perché hanno scelto di denominare le costanti come quelle non è possibile (da noi) perché nessuno su SO era nella stanza quando la decisione è stata presa.
Inoltre, conoscere la risposta alla domanda non è di aiuto, perché i valori di Float.MIN_VALUE
e Double.MIN_VALUE
non saranno modificati, non importa quanto "errati" potrebbero essere. (Romperebbe qualsiasi codice esistente che utilizza queste costanti, e i progettisti Java lo farebbero solo quando non ci sono altre alternative valide. Lasciarlo da solo è chiaramente un'alternativa valida.)
Suppongo che la risposta (cioè il vero motivo della decisione) potrebbe essere essere rilevante per le persone che sviluppano nuovi linguaggi di programmazione. Tuttavia, dovranno comunque decidere autonomamente. FWIW, non l'avrei progettato in questo modo, ma non è rilevante.
MIN_VALUE indica quanto può essere preciso un galleggiante, ma non il minimo matematico che può rappresentare. Avrebbero dovuto chiamarlo meglio ...
Negativo di MAX_VALUE è il valore minimo matematico per i float (lo stesso vale per il doppio).
La ragione per cui si può assumere questo ha a che fare con il modo i numeri sono rappresentati in binario:
galleggiante Java e doppie usano bit di segno per rappresentare i valori negativi/positivi in contrapposizione alla rappresentazione in complemento a due per gli interi. Ciò significa che il suo valore positivo e negativo hanno la stessa grandezza, cioè. - (positivo massimo) = negativo max. Pertanto non è necessario definire una costante minima matematica effettiva per i float, poiché è sufficiente utilizzare la costante massima positiva per capire quale sia il limite negativo. Per i numeri interi, sono necessarie 2 costanti diverse che definiscono il valore massimo/minimo a causa del modo in cui sono rappresentate in binario, vale a dire -max! = Min.
Per maggiori informazioni http://people.uncw.edu/tompkinsj/133/numbers/Reals.htm
Questo non spiega la denominazione incoerente, che è il vero punto della domanda. –
Buon punto, è piuttosto contro-intuitivo ... Suppongo che avrebbero dovuto chiamarlo PRECISIONE o qualcosa del genere ... ha modificato la mia risposta –
MIN_VALUE
deve essere denominato EPSILON
è il valore più piccolo postive un galleggiante può rappresentare.
Poiché un float utilizza la codifica della magnitudine di segno, il valore più basso che un float può rappresentare è -MAX_VALUE
.
Una possibile spiegazione potrebbe essere che Java appena usato la stessa convenzione di denominazione come C++, che ancora una volta ha ereditato i nomi da C.
Java è stato influenzato da C++, che condivide lo stesso schema di denominazione di confusione. In C++, l'analogia di Float.MIN_VALUE
è std::numeric_limits<T>::min()
, che è definito come:
valore minimo finita. Per i tipi floating con denormalizzazione (numero variabile di bit esponenti): valore normalizzato positivo minimo.
In C++ che è una potenziale fonte di bug nel codice del modello, così più tardi in C++ 11, hanno aggiunto std::numeric_limits<T>::lowest()
, che è definito come:
Valore minimo finito. (dal C++ 11) Per i tipi interi: lo stesso di min(). Per i tipi a virgola mobile: dipendente dall'implementazione; generalmente, il negativo di max().
Ma il C++ non era la prima lingua. Tutto risale a C, che definisce FLT_MIN il valore in virgola mobile minimo.
Quindi, perché C ha scelto di definire i numeri minimi di numeri in virgola mobile e interi in modo incoerente?
Non sicuro, ma potrebbe avere a che fare con la simmetria (vedere this answer). Per i galleggianti, è possibile utilizzare -FLT_MAX
(o -Float.MAX_VALUE
). Per i numeri interi, la negazione del valore massimo non è portabile. Di fatto, in genere è sbagliato su tutte le architetture moderne (dove dovrebbe contenere -INT_MAX == INT_MIN + 1
).
- 1. come inizializzare un float sul suo valore massimo/minimo?
- 2. trova un valore minimo in una matrice di float
- 3. Restituisce sempre il valore positivo
- 4. Perché non c'è ceil (float) in Java?
- 5. Java - Come arrotondare il valore float (o BigDecimal) di 0,5?
- 6. Java: Perché è necessario specificare una "f" in un valore letterale float?
- 7. Trova il valore minimo in una colonna
- 8. Qual è la differenza tra Float e float in java?
- 9. OBJ-C: Ottenere il valore minimo/massimo in un NSMutableArray
- 10. Java, cast impossibile Object to Float ..... perché?
- 11. Perché numeric_limits :: min restituisce un valore negativo per int ma valori positivi per float/double?
- 12. Ottieni il valore minimo tra più colonne
- 13. Valore minimo Android SeekBar
- 14. Valore minimo dallo stack
- 15. aggiornamento positivo al valore negativo in mysql
- 16. Java float è più preciso del doppio?
- 17. È un valore null immesso in Java
- 18. Valore minimo nell'intervallo
- 19. Ottieni il valore minimo con D
- 20. Perché il valore enum predefinito è 0 e non quello minimo?
- 21. Trovare il valore minimo del cluster massimo?
- 22. IDA: è stato rilevato un valore sp positivo
- 23. Come passare il valore float dove datatype è CMTime?
- 24. MySQL - Selezionare il valore minimo di una colonna dopo aver selezionato il valore minimo di un'altra colonna
- 25. Perché l'intervallo di byte da -128 a 127 in Java?
- 26. "Rigorosamente positivo" in Agda
- 27. Java converte float in intero
- 28. Java: double vs float
- 29. Trovare il valore massimo e minimo di ogni colonna e poi trovare il valore massimo e minimo di ogni riga
- 30. Java 8: trovare l'indice del valore minimo da un elenco
+1 per notare che la domanda richiede l'impossibilità di procurarsi dicerie. – Mikhail
non si può davvero dire che nessuno qui era nella stanza quando la decisione è stata presa :) (non me comunque) – rupps
Tuttavia, dato che era una stanza piuttosto piccola, e le persone che erano in esso sarebbe ora piuttosto anziano ... o in pensione ... o ... penso che possiamo essere abbastanza sicuri. (Hai mai visto James Gosling rispondere alle domande su StackOverflow?) –