Etwa ein Viertel der double Zahlen liegt zwischen 0 und 1, also etwa 2^62
Bei double hat man in der mantisse 52 bits, und im bias 11 bits. Wir wollen nur positive zahlen kleiner 1, also kann man für normalisierte zahlen 2^10 verschiedene zustände im bias und 2^52 verschiedene zustände in der mantisse abbilden, da bekommt man schonmal 2^62 Zahlen. Dann kommen nochmal die denormalisierten dazu, bias wird komplett auf 0 gesetzt, und man hat immer noch 2^52 möglichkeiten in der mantisse.
Anzahl der normalisierten und denormalisierten zahlen zwischen [0,1] zusammengezählt würde ich also auf 2^62+2^52 schätzen.
Ok, mit 2^52 und 2^53 lag ich offenbar ziemlich falsch. Hab ich das richtig verstanden, da die hälfte der exponentenwerte negativ ist, und die hälfte der mantissenwerte auch (vorzeichenbit), liegt ein viertel der werte insgesamt zwischen 0 und 1. Also 2^64/4 = 2^62.
Aber stimmt das auch exakt?
Der Exponent liegt mit 11 Bit im Wertebereich von 0 bis 2047. Mit Bias 1023 ergibt sich 2047-1023= 1024 positive exponentenwerte (2^1 - 2^1024), 1023 negative exponentenwerte (2^-1 bis 2^-1023) und 2^0.
Bei 2^0 liegt genau 1 Wert (der für 1) im Wertebereich 0-1. Bei 2^-1 bis 2^-1023 sind es alle (da mantisse normaliesiert auf 1-(<2)). Bei 2^1 und größer ist es keiner.
Es müssten also exakt ((2^10 -1)*2^52)+1 = 2^62-2^52 +1 Werte zwischen 0 und 1 liegen. Richtig?
Wieviele Werte liegen dann zwischen 1 und 2? Die Hälfte aller Werte bei Exponent 2^0 und einer bei 2^1. Also Insgesamt 2^51+1, oder? Die präzision ist also ungefähr 2000 mal geringer. Zwischen 1000 und 1001 dürften dann nur noch 2^43 werte liegen.
edit: huch, zwischen 1 und 2 liegen natürlich auch 2^52 zahlen. sind natürlich alle von 2^0. Wie bin ich denn darauf gekommen. Tja...