Ok, ecco un altro tentativo di definizione formale.
Se f(x)
è una conversione di ampliamento, per ogni x <= y
, f(x) <= f(y)
. In altre parole, l'ampliamento delle conversioni conserva un ordinamento parziale dei valori.
Questo è quello che non significa perdere informazioni sulla magnitudine complessiva.
La perdita di precisione in questo framework indica che per alcuni x < y
, f(x) = f(y)
.
L'unico problema con questa definizione è il (float)Double.MAX_VALUE
trabocco risultante Float.POSITIVE_INFINITY
, che risponde tecnicamente i criteri di cui sopra, ma non in realtà dovrebbe contare come non perdere le informazioni circa l'entità complessiva.
Il modo in cui lo vedo, in pratica significa "il valore concettuale astratto" in opposizione alla sequenza effettiva di bit utilizzata per rappresentare il valore. A proposito, la conversione 'float-> double' fa ** not ** preserva la grandezza generale. – biziclop
@biziclop - non se è 'strictfp' - quindi non dovrebbe perdere alcuna informazione:" * da float a double in un'espressione 'strictfp' (§15.4), non perde alcuna informazione, il valore numerico è perfettamente conservato. * " –
@AndyBrown Sì. È solo il modo in cui questo è espresso nel JLS è un po 'strano: prima affermano che non succede, poi cinque paragrafi dopo aggiungono un avvertimento che erm ... in realtà, senza 'strictfp' succede. – biziclop