JavaRush /Blog Jawa /Random-JV /Apa sing ana ing nomer floating point lan kepiye cara ker...
Ivan
tingkat
Харьков

Apa sing ana ing nomer floating point lan kepiye cara kerjane?

Diterbitake ing grup

Isi:

Gambar: http://pikabu.ru/

Pambuka

Ing dina wiwitan sinau basa Jawa, aku nemoni jinis primitif kayadene angka floating point. Aku langsung kasengsem karo fitur-fitur kasebut lan, luwih-luwih, kanthi cara sing ditulis ing kode binar (sing saling nyambungake). Boten kados sawetara wilangan bulat, malah ing sawetara banget cilik (contone, saka 1 kanggo 2) ana nomer tanpa wates. Lan duwe ukuran memori winates, iku mokal kanggo nyebut pesawat iki. Dadi, kepiye carane diekspresikake ing binar lan kepiye cara kerjane? Sayange, panjelasan ing wiki lan artikel sing rada keren babagan Habré ing kene ora menehi pangerten sing lengkap, sanajan dheweke nggawe dhasar. Kawujudan kasebut mung sawise maca artikel analisis iki esuk sawise maca.

Excursion menyang sajarah

( dijupuk saka artikel iki ing Habré ) Ing taun 60-70-an, nalika komputer gedhe lan program cilik, isih ora ana standar siji-sijine kanggo petungan, uga standar kanggo nyebut nomer floating point dhewe. Saben komputer nindakake kanthi beda, lan saben duwe kesalahan dhewe. Nanging ing agêng-70s, Intel mutusaké kanggo nggawe prosesor anyar karo didhukung aritmetika "apik" lan ing wektu sing padha standarisasi. Profesor William Kahan lan John Palmer (ora, dudu penulis buku babagan bir) digawa kanggo ngembangake. Ana sawetara drama, nanging standar anyar dikembangake. Saiki standar iki diarani IEEE754

Format angka floating point

Malah ing buku teks sekolah, saben wong ngadhepi cara nulis sing ora biasa banget utawa nomer cilik banget, yaiku 1.2 × 10 3 utawa 1.2 E3 , sing padha karo 1.2 × 1000 = 1200 . Iki diarani metode notasi eksponensial. Ing kasus iki, kita dealing karo ekspresi nomer nggunakake rumus: N = M × n p , ngendi
  • N = 1200 - nomer asil
  • M = 1,2 - mantissa - bagean pecahan, tanpa njupuk pesenan akun
  • n = 10 minangka basis urutan. Ing kasus iki lan nalika kita ora ngomong babagan komputer, dhasar yaiku nomer 10
  • p = 3 - derajat saka basa
Cukup asring, dhasar urutan dianggep dadi 10 lan mung mantissa lan nilai dhasar sing ditulis, misahake karo huruf E. Ing conto kita, aku menehi entri sing padha karo 1.2 × 10 3 lan 1.2 E3 Yen kabeh wis jelas, lan kita wis rampung dolan nostalgia menyang kurikulum sekolah, mula saiki aku nyaranake dilalekake, amarga nalika mbentuk nomer floating point sing kita tindakake. kakuwasan loro, ora puluhan, i.e. n = 2 , kabeh rumus harmonis 1.2E3 rusak lan tenan nyuwil otak.

Tandha lan gelar

Dadi apa sing kita duwe? Akibaté, kita uga duwe nomer binar, sing kasusun saka mantissa - bagean sing bakal kita mundhakaken menyang daya lan daya dhewe. Kajaba iku, kaya sing umum karo jinis integer, angka floating-point duweni bit sing nemtokake tandha - apa nomer kasebut bakal positif utawa negatif. Minangka conto, aku propose kanggo nimbang jinis float, kang kasusun saka 32 bit. Kanthi nomer tliti pindho doublelogika padha, mung ana kaping pindho minangka akeh bit. Saka 32 bit, sing paling penting pisanan dialokasikan kanggo tandha, 8 bit sabanjure dialokasikan kanggo eksponen - daya sing bakal kita mundhakaken mantissa, lan 23 bit sing isih ana - menyang mantissa. Kanggo nduduhake, ayo goleki conto: Apa sing ana ing nomer floating point lan cara kerjane - 1Bit pisanan gampang banget. Yen nilai bit pisanan iku 0 , banjur nomer kita njaluk bakal positif . Yen bit 1 , banjur nomer bakal negatif . Blok sabanjure 8 bit yaiku blok eksponen. Eksponen ditulis minangka nomer wolung bit biasa , lan kanggo entuk gelar sing dibutuhake, kita kudu nyuda 127 saka nomer asil . Ing kasus kita, wolung bit saka eksponen yaiku 10000001 . Iki cocog karo nomer 129 . Yen sampeyan duwe pitakonan babagan carane ngetung iki, banjur gambar nuduhake jawaban cepet. Versi sing ditambahi bisa dipikolehi ing sembarang kursus aljabar Boolean. Apa sing ana ing nomer floating point lan cara kerjane - 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 Ora angel ngetung yen jumlah maksimal sing bisa dipikolehi saka 8 bit iki yaiku 11111111 2 = 255 10 (subskrip 2 lan 10 tegese sistem nomer biner lan desimal) Nanging, yen mung nggunakake nilai eksponen positif. ( saka 0 kanggo 255 ), banjur nomer asil bakal akeh nomer sadurunge titik desimal, nanging ora sawise? Kanggo entuk nilai negatif saka gelar, sampeyan kudu nyuda 127 saka eksponen sing digawe . Mangkono, sawetara derajat bakal saka -127 kanggo 128 . Yen kita nggunakake conto, gelar sing dibutuhake yaiku 129-127 = 2 . Ayo padha ngelingi nomer iki kanggo saiki.

Mantissa

Saiki babagan mantissa. Iku kasusun saka 23 bit, nanging ing awal tansah ana unit liyane diwenehake, kang bit ora diparengake. Iki ditindakake kanthi alasan ekonomi lan ekonomi. Nomer sing padha bisa ditulis ing macem-macem kekuwatan kanthi nambahake nol menyang mantissa sadurunge utawa sawise titik desimal. Cara paling gampang kanggo mangerteni iki yaiku kanthi eksponen desimal: 120.000 = 1.2×10 5 = 0.12×10 6 = 0.012×10 7 = 0.0012×10 8 etc. Nanging, kanthi ngetik nomer tetep ing sirah mantissa, kita bakal nampa nomer anyar saben wektu. Ayo dadi njupuk kanggo diwenehake sing sadurunge kita 23 bit bakal ana siji liyane karo siji. Biasane bit iki dipisahake saka liyane kanthi titik, sing, nanging ora ateges apa-apa. Iku mung luwih trep 1. 1110000000000000000000000000000000000000000000000000 Apa sing ana ing nomer floating point lan cara kerjane - 3Saiki asil Mantissa kudu ditimbulake kanthi kekuwatan saka kiwa menyang tengen, nyuda kekuwatan kanthi siji langkah. Kita miwiti kanthi nilai daya sing dipikolehi minangka asil pitungan, yaiku 2 (Aku sengaja milih conto sing gampang supaya ora nulis saben nilai kekuwatan loro lan ora ngetung ing tabel ing ndhuwur nalika bit sing cocog yaiku nol) Apa sing ana ing nomer floating point lan cara kerjane - 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 lan entuk asil 7.5 , bener bisa dicenthang, contone, ing link iki

Asil

Nomer floating-point standar floatkasusun saka 32 bit, bit pisanan minangka tandha (+ utawa -), wolung sabanjure minangka eksponen, sabanjure 23 minangka mantissa Miturut tandha - yen bit 0 minangka nomer positif. Yen bit 1 negatif. Miturut eksponensial - kita ngowahi bitwise dadi angka desimal (bit pisanan saka sisih kiwa yaiku 128 , kaloro yaiku 64 , katelu yaiku 32 , kaping papat yaiku 16 , kaping lima yaiku 8 , kaping enem yaiku 4 , kaping pitu yaiku 2 , kaping wolu yaiku 1 ), nyuda 127 saka nomer asil , kita entuk gelar sing bakal diwiwiti. Miturut mantissa - kanggo 23 bit sing ana ing ngarep kita nambah bit liyane karo nilai 1 lan saka iku kita wiwiti mundhakaken menyang daya kita nampa, decrementing daya iki saben dicokot sakteruse. Kuwi kabeh, bocah-bocah! Apa sing ana ing nomer floating point lan cara kerjane - 5PS: Minangka peer, nggunakake artikel iki, tinggalake ing komentar versi sampeyan kenapa kesalahan presisi kedadeyan karo operasi aritmetika kanthi nomer floating point.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION