Java double
dalam format IEEE-754 , oleh karena itu mereka memiliki pecahan 52-bit; antara dua pangkat dua yang berdekatan (termasuk satu dan tidak termasuk pangkat berikutnya), oleh karena itu akan ada 2 pangkat 52 yang berbeda double
(yaitu, 4503599627370496 di antaranya). Misalnya, itu adalah jumlah perbedaan double
antara 0,5 yang disertakan dan 1,0 yang dikecualikan, dan banyak juga yang berada di antara 1,0 yang disertakan dan 2,0 yang dikecualikan, dan seterusnya.
Menghitung doubles
antara 0,0 dan 1,0 lebih sulit daripada melakukannya di antara pangkat dua, karena ada banyak pangkat dua yang termasuk dalam kisaran itu, dan, juga, seseorang akan mengalami masalah pelik tentang bilangan yang dinormalisasi. 10 dari 11 bit eksponen mencakup kisaran yang dimaksud, jadi, termasuk angka yang didenormalisasi (dan saya pikir beberapa jenis NaN
) Anda akan memiliki 1024 kali double
s seperti yang berada di antara pangkat dua - tidak lebih dari 2**62
totalnya . Tidak termasuk dinormalisasi & c, saya yakin jumlahnya akan menjadi 1023 kali 2**52
.
Untuk rentang arbitrer seperti "100 hingga 100.1", ini lebih sulit karena batas atas tidak dapat secara tepat direpresentasikan sebagai double
(bukan kelipatan tepat dari pangkat dua). Sebagai perkiraan praktis, karena progresi antara pangkat dua adalah linier, Anda dapat mengatakan bahwa rentang tersebut adalah 0.1 / 64
rentang antara pangkat dua di sekitarnya (64 dan 128), jadi Anda akan mengharapkan
(0.1 / 64) * 2**52
berbeda double
s - yang datang ke 7036874417766.4004
... memberi atau menerima satu atau dua ;-).