Java >> Java tutorial >  >> Tag >> java.util

Hvorfor hævder Oracle, at java.util.Random.nextFloat() genererer 2^24 muligheder og ikke 2^23?

I intervallet [+0, 1) er der 127•2 23 værdier, der kan repræsenteres i float , ikke 2 24 . Der er én for hver kombination af et eksponentkodningsfelt fra 0 til 126 inklusive, med hver værdi på 23 bit i significand-kodningsfeltet.

Hver værdi i formen m •2 −24 , med 0 ≤ m <2 24 , er repræsenteret. Den mindste ikke-nul værdi i denne form er 2 −24 , som er repræsenteret med en eksponentkode på 103 og en signifikanskode på 0. Den matematiske eksponent er koden, 103, minus bias, 127, som er lig med -24, og den matematiske signifikans er 1.

For enhver sådan m andet end nul, lad b være positionsnummeret på dens førende 1 bit (nummerering fra 0 for den lave bit). Derefter m •2 −24 er kodet i float med en eksponentkode på b +103 og en signifikant kode på m •2 24− b −2 24 . For m =0, den er kodet med alle nul bits.

Ingen af ​​tallene i denne formular er subnormale.


Java tag