Rumah >pembangunan bahagian belakang >C++ >Bolehkah Semua Nilai Integer Diwakili Dengan Sempurna sebagai Beregu?
Adakah Semua Nilai Integer Diwakili Sempurna sebagai Beregu?
Timbul persoalan sama ada semua nilai integer dijamin mempunyai perwakilan yang sempurna sebagai nombor titik terapung berketepatan ganda. Untuk menjawabnya, kita mula-mula menyelidiki perwakilan beregu.
Beregu diwakili sebagai mantissa * 2^exponent, di mana mantissa termasuk digit pecahan. Ini membenarkan perwakilan nilai integer dan perpuluhan.
Perwakilan Integer 32-Bit
Untuk integer 32-bit, terdapat sehingga 53 bit tersedia untuk mantissa. Ini mencukupi untuk mewakili semua integer 32-bit yang mungkin tanpa kehilangan pecahan. Oleh itu, ya, semua nilai integer 32-bit diwakili dengan sempurna sebagai dua kali ganda.
Perwakilan Integer 64-Bit
Walau bagaimanapun, untuk integer 64-bit, keadaan adalah berbeza. IEEE 754 berketepatan berganda boleh menjamin perwakilan sempurna sehingga 53 bit. Selain itu, mungkin terdapat ralat pembundaran. Oleh itu, tidak, tidak semua nilai integer 64-bit diwakili dengan sempurna sebagai dua kali ganda.
Mengesahkan Gelagat Secara Empirikal
Coretan kod berikut menguji penukaran integer kepada beregu :
<code class="cpp">#include <iostream> #include <limits> using namespace std; int main() { double test; volatile int test_int; for (int i = 0; i < numeric_limits<int>::max(); i++) { test = i; test_int = test; if (test_int != i) cout << "found integer i=" << i << ", test=" << test << endl; } return 0; }</code>
Menjalankan kod ini mendedahkan bahawa tiada nilai integer dengan ralat penukaran pecahan untuk integer 32-bit. Walau bagaimanapun, untuk integer 64-bit, adalah mungkin untuk mencari nilai integer yang bertukar kepada dua kali dengan perbezaan pecahan dan bulatkan kembali kepada nilai integer asal.
Perbezaan Pecahan
Mengenai kemungkinan perbezaan pecahan semasa penukaran, jawapannya masih tidak untuk integer. Ini kerana lebar langkah antara nilai berganda diwakili sebagai mantissa * 2^exponent sentiasa kuasa dua. Oleh itu, tidak ada perbezaan yang lebih kecil daripada 2 antara dua nilai berganda, menyelesaikan sebarang isu pembundaran.
Atas ialah kandungan terperinci Bolehkah Semua Nilai Integer Diwakili Dengan Sempurna sebagai Beregu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!