Pertanyaan Nilai bilangan bulat maksimum untuk ganda


Itu adalah nilai integer maksimal yang dapat ditugaskan ke Java double dan masih berlaku sebagai nilai integer? Maksud saya, itu harus memenuhi kondisi biasa

a + 1 > a;
a - 1 < a;

Dengan nilai yang cukup besar, bahkan a + 1000 mungkin masih a karena kesalahan pembulatan.

Saya harus menggunakan double sebagai penghitung dan ingin tahu di mana batas atas penghitungan diandalkan.


4
2017-11-29 16:40


asal


Jawaban:


Angka yang Anda cari adalah 9,007,199,254,740,991 karena 9,007,199,254,740,991 + 1 = 9,007,199,254,740,992 tapi 9,007,199,254,740,992 + 1 = 9,007,199,254,740,992.

Saya menemukan ini secara eksperimental menggunakan cuplikan berikut.

double a = 9.007199254E15;
while (a + 1 > a) {
    a += 1;
}
System.out.println(a);

Mengingat fakta bahwa Anda menggunakan nilai ini sebagai penghitung, dan bahwa nilai maksimum untuk rindu adalah 2^63 - 1 = 9.22E18 (seperti yang ditunjukkan oleh Peter), tampaknya tidak ada alasan untuk tidak menggunakan rindu sebagai gantinya.


4
2017-11-29 16:54



Saya perlu menggunakan ganda sebagai counter dan ingin tahu di mana batas atas penghitungan diandalkan.

Saya tidak bisa membayangkan mengapa Anda akan menggunakan double sebagai counter untuk menyimpan integer, tetapi batasnya adalah dalam kisaran delapan juta miliar (2 ^ 53). Jika Anda menggunakan long sebagai penghitung batasnya adalah 9 miliar miliar.


4
2017-11-29 16:49



Jika, dengan integer, maksud Anda int, maka semua mungkin int nilai cocok menjadi double karena int didefinisikan sebagai 32-bit signed integer quantity, dan a double memiliki ukuran mantissa 53 bit (di mana sebuah int nilai cocok dengan nyaman). Jika yang kamu maksud long, di sisi lain, maka semuanya berbeda, karena longs adalah bilangan bulat bertanda 64-bit.

Nilai panjang maksimum yang dapat diwakilkan harus seperti 253 - 1 atau lebih (tidak mencobanya, jadi mungkin salah).


1
2017-11-29 16:52