JavaRush /Blog Java /Random-MS /Apakah yang ada di dalam nombor titik terapung dan bagaim...
Ivan
Tahap
Харьков

Apakah yang ada di dalam nombor titik terapung dan bagaimana ia berfungsi?

Diterbitkan dalam kumpulan

Kandungan:

Imej: http://pikabu.ru/

pengenalan

Pada hari-hari pertama mempelajari Java, saya menjumpai jenis primitif seperti nombor terapung. Saya segera berminat dengan ciri-ciri mereka dan, lebih-lebih lagi, dengan cara ia ditulis dalam kod binari (yang saling berkaitan). Tidak seperti mana-mana julat integer, walaupun dalam julat yang sangat kecil (contohnya, dari 1 hingga 2) terdapat bilangan yang tidak terhingga. Dan mempunyai saiz memori yang terhad, adalah mustahil untuk menyatakan set ini. Jadi bagaimana ia dinyatakan dalam binari dan bagaimana ia berfungsi? Malangnya, penjelasan di wiki dan artikel yang agak keren tentang Habré di sini tidak memberi saya pemahaman yang lengkap, walaupun mereka meletakkan asasnya. Kesedaran datang hanya selepas membaca artikel analisis ini pada pagi selepas membacanya.

Lawatan ke dalam sejarah

( diambil daripada artikel ini tentang Habré ) Pada tahun 60-70an, apabila komputer besar dan program kecil, masih tiada piawai tunggal untuk pengiraan, serta piawai untuk menyatakan nombor titik terapung itu sendiri. Setiap komputer melakukannya secara berbeza, dan masing-masing mempunyai ralat sendiri. Tetapi pada pertengahan 70-an, Intel memutuskan untuk membuat pemproses baharu dengan aritmetik "diperbaiki" yang disokong dan pada masa yang sama menyeragamkannya. Profesor William Kahan dan John Palmer (bukan, bukan pengarang buku tentang bir) dibawa masuk untuk membangunkannya. Terdapat beberapa drama, tetapi standard baharu telah dibangunkan. Kini piawaian ini dipanggil IEEE754

Format nombor titik terapung

Malah dalam buku teks sekolah, setiap orang berhadapan dengan cara penulisan yang luar biasa nombor yang sangat besar atau sangat kecil dalam bentuk 1.2 × 10 3 atau 1.2 E3 , iaitu bersamaan dengan 1.2 × 1000 = 1200 . Ini dipanggil kaedah notasi eksponen. Dalam kes ini, kita berurusan dengan ungkapan nombor menggunakan formula: N=M×n p , di mana
  • N = 1200 - nombor yang terhasil
  • M = 1,2 - mantissa - bahagian pecahan, tanpa mengambil kira pesanan
  • n = 10 ialah asas susunan. Dalam kes ini dan apabila kita tidak bercakap tentang komputer, asasnya ialah nombor 10
  • p = 3 - darjah asas
Selalunya, pangkal pesanan diandaikan 10 dan hanya mantissa dan nilai pangkalan ditulis, memisahkannya dengan huruf E. Dalam contoh kami, saya memberikan entri setara 1.2 × 10 3 dan 1.2 E3 Jika semuanya jelas, dan kami telah menamatkan lawatan nostalgia ke dalam kurikulum sekolah, maka sekarang saya cadangkan untuk melupakan perkara ini, kerana apabila membentuk nombor titik terapung kita sedang berurusan dengan kuasa dua, bukan sepuluh, i.e. n = 2 , keseluruhan formula harmoni 1.2E3 rosak dan ia benar-benar memecahkan otak saya.

Tanda dan ijazah

Jadi apa yang kita ada? Akibatnya, kita juga mempunyai nombor binari, yang terdiri daripada mantissa - bahagian yang kita akan naikkan kepada kuasa dan kuasa itu sendiri. Di samping itu, sama seperti biasa dengan jenis integer, nombor titik terapung mempunyai sedikit yang menentukan tanda - sama ada nombor itu akan positif atau negatif. Sebagai contoh, saya mencadangkan untuk mempertimbangkan type float, yang terdiri daripada 32 bit. Dengan nombor ketepatan berganda doublelogiknya adalah sama, cuma terdapat dua kali lebih banyak bit. Daripada 32 bit, yang pertama yang paling penting diperuntukkan kepada tanda, 8 bit seterusnya diperuntukkan kepada eksponen - kuasa yang mana kita akan menaikkan mantissa, dan baki 23 bit - kepada mantissa. Untuk menunjukkan, mari kita lihat contoh: Apa yang ada di dalam nombor titik terapung dan cara ia berfungsi - 1Bit pertama adalah sangat mudah. Jika nilai bit pertama ialah 0 , maka nombor yang kita dapat adalah positif . Jika bit adalah 1 , maka nombornya akan menjadi negatif . Blok 8 bit seterusnya ialah blok eksponen. Eksponen ditulis sebagai nombor lapan bit biasa , dan untuk mendapatkan darjah yang diperlukan kita perlu menolak 127 daripada nombor yang terhasil . Dalam kes kita, lapan bit eksponen ialah 10000001 . Ini sepadan dengan nombor 129 . Jika anda mempunyai soalan tentang cara mengira ini, maka gambar menunjukkan jawapan pantas. Versi dikembangkan boleh diperolehi dalam mana-mana kursus algebra Boolean. Apa yang ada di dalam nombor titik terapung dan cara ia berfungsi - 21×2 7 + 0×2 6 + 0×2 5 + 0×2 4 + 0×2 3 + 0×2 2 + 0×2 1 + 1×2 0 = 1×128 + 1×1 = 128+ 1=129 Tidak sukar untuk mengira bahawa nombor maksimum yang boleh kita perolehi daripada 8 bit ini ialah 11111111 2 = 255 10 (subskrip 2 dan 10 min sistem nombor binari dan perpuluhan) Walau bagaimanapun, jika kita hanya menggunakan nilai eksponen positif ( dari 0 hingga 255 ), maka nombor yang terhasil akan mempunyai banyak nombor sebelum titik perpuluhan, tetapi tidak selepas? Untuk mendapatkan nilai negatif darjah, anda perlu menolak 127 daripada eksponen yang dijana . Oleh itu, julat darjah adalah dari -127 hingga 128 . Jika kita menggunakan contoh kita, ijazah yang diperlukan ialah 129-127 = 2 . Mari kita ingat nombor ini buat masa ini.

Mantissa

Sekarang tentang mantissa. Ia terdiri daripada 23 bit, tetapi pada mulanya sentiasa ada unit lain yang tersirat, yang mana bit tidak diperuntukkan. Ini dilakukan atas sebab kesesuaian dan ekonomi. Nombor yang sama boleh dinyatakan dalam kuasa yang berbeza dengan menambahkan sifar pada mantissa sebelum atau selepas titik perpuluhan. Cara paling mudah untuk memahami perkara ini ialah dengan eksponen perpuluhan: 120,000 = 1.2×10 5 = 0.12×10 6 = 0.012×10 7 = 0.0012×10 8 dsb. Walau bagaimanapun, dengan memasukkan nombor tetap di kepala mantissa, kami akan menerima nombor baharu setiap kali. Mari kita ambil mudah bahawa sebelum 23 bit kita akan ada satu lagi dengan satu. Biasanya bit ini dipisahkan dari yang lain oleh titik, yang, bagaimanapun, tidak bermakna apa-apa. Ia lebih mudah 1. 111000000000000000000000 Apa yang ada di dalam nombor titik terapung dan cara ia berfungsi - 3Sekarang mantissa yang terhasil perlu dinaikkan kepada kuasa dari kiri ke kanan, mengurangkan kuasa sebanyak satu dengan setiap langkah. Kami bermula dari nilai kuasa yang kami perolehi hasil pengiraan, iaitu 2 (Saya sengaja memilih contoh mudah supaya tidak menulis setiap nilai kuasa dua dan tidak mengiranya dalam jadual di atas apabila bit yang sepadan ialah sifar) Apa yang ada di dalam nombor titik terapung dan bagaimana ia berfungsi - 41×2 2 + 1×2 1 + 1×2 0 + 1×2 -1 = 1×4 + 1×2 + 1×1 + 1×0.5 = 4+2+1+0.5 = 7.5 dan mendapat keputusan 7.5 , ketepatan boleh disemak, sebagai contoh, di pautan ini

Keputusan

Nombor titik terapung standard floatterdiri daripada 32 bit, bit pertama ialah tanda (+ atau -), lapan seterusnya ialah eksponen, 23 seterusnya ialah mantissa By sign - jika bit 0 ialah nombor positif. Jika bit 1 negatif. Dengan eksponen - kami menukar bitwise menjadi nombor perpuluhan (bit pertama dari kiri ialah 128 , yang kedua ialah 64 , yang ketiga ialah 32 , yang keempat ialah 16 , yang kelima ialah 8 , yang keenam ialah 4 , yang ketujuh ialah 2 , yang kelapan ialah 1 ), tolak 127 daripada nombor yang terhasil , kita mendapat darjah yang akan kita mulakan. Menurut mantissa - kepada 23 bit yang sedia ada di hadapan kami menambah bit lain dengan nilai 1 dan dari itu kami mula meningkatkan kuasa yang kami terima, mengurangkan kuasa ini dengan setiap bit berikutnya. Itu sahaja orang, anak-anak! Apa yang ada di dalam nombor titik terapung dan cara ia berfungsi - 5PS: Sebagai kerja rumah, menggunakan artikel ini, tinggalkan dalam ulasan versi anda tentang sebab ralat ketepatan berlaku dengan sejumlah besar operasi aritmetik dengan nombor titik terapung
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION