JavaRush /Java Blog /Random-TL /Mga totoong numero sa memorya ng computer. Paliwanag.
Marianna
Antas
Москва

Mga totoong numero sa memorya ng computer. Paliwanag.

Nai-publish sa grupo
Magandang hapon Habang pinag-aaralan ang lecture na "Nuances ng pagtatrabaho sa mga totoong numero" ng unang paghahanap (seksyon 2. Ang istraktura ng mga numero ng lumulutang na punto) at karagdagang mga lektura sa paksa, marami ang maaaring nakatagpo ng maraming mga katanungan sa paksang ito. Sa una, sinubukan kong bigyan ang aking sarili ng mga kinakailangang sagot, at ngayon ay inaalok ko ang mga ito sa iyo upang matulungan kang lubos na maunawaan sa isang pare-parehong lohikal na pagkakasunud-sunod. 1. Decimal at binary number system. 1.1 Ang sistema ng decimal na numero ay isa sa mga pinakakaraniwang sistema; ito ang ginagamit namin para sa anumang hindi-computer na mga kalkulasyon sa matematika sa paaralan, sa unibersidad, sa buhay. Gumagamit ito ng mga numero 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 (Arabic) - 10 digit sa kabuuan. Mayroon ding notasyong Romano para sa mga numero, na, gayunpaman, ay halos hindi na ginagamit ngayon. Sa sistema ng decimal, ang pagbibilang ay isinasagawa sa mga yunit, sampu, daan, libo, sampu-sampung libo, daan-daang libo, milyon, atbp. - sa madaling salita, ito ang lahat ng mga digit ng numero. Ang digit ng isang numero ay ang posisyon (lugar) ng digit sa talaan ng numero. Ang pinakamababang digit ng mga natural na numero (at ang hindi gaanong makabuluhan ) ay ang digit ng unit (pinakakanan). Bakit siya ang pinakawalang kwenta? Dahil sa pagbaba ng unit digit ng isang numero, mababago ang numero mismo (halimbawa, ang mga numerong 345 at 340). Susunod, ang pangalawang digit ay ang sampung digit, atbp. Ano ang ibig sabihin ng lahat ng ito? Kunin natin ang anumang integer sa decimal system at i-decompose ito sa mga digit . 3297 = 3*1000 + 2*100 + 9*10 + 7 Kaya, nakita namin na ang numero 3297 ay naglalaman ng 3 mga yunit ng ikaapat na digit (iyon ay, 3 libo), 2 mga yunit ng ikatlong digit (2 daan-daan), 9 mga yunit ng ikalawang digit (9 sampu) at 7 mga yunit ng unang digit . Sa madaling salita, ang bilang na ito ay tatlong libo dalawang daan siyamnapu't pito at ito ay, nang naaayon, positional . Paano naman ang mga digit ng fractional (real) na mga numero? Ang mga digit ng mga fractional na numero (ang kanilang fractional na bahagi) ay tinatawag na: tenths, hundredths, thousandths, ten-thousandths, atbp. Kung mas malayo ang digit mula sa decimal point (mula sa buong bahagi ng numero), hindi gaanong makabuluhan ito (itinatapon ito, mababago ng kaunti ang halaga ng numero). Halimbawa, kunin natin ang anumang fractional na numero na ipinakita bilang isang decimal: 25.076 = 2*10 + 5 +0*0.1 + 7*0.01 +6*0.001 Kaya, nakita namin na ang fractional number na 25.076 ay naglalaman ng 2 tens, 5 units, 0 tenths , 7 hundredths at 6 thousandths. Gumagamit ang decimal system ng 10 digit at multiple ng 10 lugar - kaya tinawag na "decimal". 1.2 Ang sistema ng binary na numero ay isang sistema ng numero na ginagamit sa halos lahat ng mga modernong kompyuter at iba pang mga elektronikong kagamitan sa pagko-compute. Upang magtala ng mga numero, gumagamit lamang ito ng dalawang digit - 0 at 1. Upang hindi malito kung saang sistema ng numero nakasulat ang numero, binibigyan ito ng indicator sa kanang ibaba (ito ang base ng sistema ng numero ), para sa halimbawa: 1000₁₀ 1000₂ Dito ang unang numero ay ang pamilyar na libo sa decimal system, at ang ibaba ay ang numero sa binary system representation at ito ay pantay sa decimal system... 8 ! Tulad ng sistemang desimal, hinahati-hati din ng binary system ang mga numero sa mga digit . Ang bawat digit sa isang binary na numero ay tinatawag na bit (o digit ). (Kung sinuman ang interesado, ang apat na bit ay isang nibble (o tetrad), 8 bits ay isang byte , 16 bits ay isang salita , 32 bits ay isang double word ). Ang mga bit (digit) ay binibilang din mula kanan pakaliwa, simula sa zero (hindi katulad ng decimal system). Ang hindi gaanong makabuluhan, hindi gaanong makabuluhan, tamang bit ay may sequence number na 0 . Susunod ang unang bit, ang pangalawa , atbp., mas matanda ang bit, mas makabuluhan ito (sa pagkakatulad sa sistema ng decimal na naiintindihan namin - kung aalisin mo ang mga mula sa numerong 1455, maiiwan ka sa numerong 1450 - halos katumbas ng una. Ngunit kung aalisin mo ang daan-daan, maiiwan ka sa numerong 1050, na malayo na sa inisyal na halaga, dahil ang daan-daang lugar ay mas makabuluhan (high-order) kaysa sa lugar ng mga yunit. ). Halimbawa. HINDI PA MAGBASA :))) Mga totoong numero sa memorya ng computer.  SA ILALIM NG PAG-UNLAD!!!  - 2 Sa ibaba, ang mga piraso ng fractional binary na numerong ito ay may bilang na pula - sa kabuuan mayroon kaming 18 bits (mga digit) ng numerong ito. Sa hinaharap, nais kong tandaan na ang mga fractional na numero ay naka-imbak sa memorya ng computer sa isang ganap na naiibang paraan - ito ay tatalakayin sa ibang pagkakataon. Pansamantala, alamin natin kung paano i-convert ang mga numero mula sa isang sistema ng numero patungo sa isa pa. 2. Pag-convert ng mga integer at fraction mula sa decimal system patungo sa binary system at vice versa. 2.1 Conversion mula sa decimal patungo sa binary. 2.1.1 Mga integer. Upang ma-convert ang isang integer decimal number sa binary number system, kailangan mong hatiin ang numerong ito sa 2, isulat ang natitira sa dibisyon (ito ay palaging katumbas ng 0 o 1, depende sa kung ang numero ay kahit na o kakaiba) , at hatiin muli ang resulta ng dibisyon ng 2 , muli isulat ang natitira sa dibisyon (0 o 1), at hatiin muli ang resulta mula sa pangalawang dibisyon ng 2. Magpatuloy sa ganitong paraan hanggang ang resulta ng dibisyon ay katumbas ng isa. Susunod, isusulat namin ang lahat ng nagreresultang mga zero at isa sa reverse order , simula sa pinakahuling resulta ng division, na palaging katumbas ng 1. Mahalagang tala. Ang huling resulta ng sequential division ng ANUMANG INTEGER sa pamamagitan ng 2 ay palaging magiging isa (1)! Kung ang resulta ay higit sa 1, patuloy naming hinahati ang resulta sa 2 hanggang sa makuha namin ang isa bilang resulta. At ang resulta ng paghahati sa pamamagitan ng 2 ay maaaring maging zero (0) lamang sa isang kaso - ito ay ang paghahati ng zero mismo sa pamamagitan ng 2. Halimbawa. I-convert natin ang numerong 145 mula sa decimal system sa binary. 145/2 = 72 (natitira 1 ) 72/2 = 36 (natitira 0 ) 36/2 = 18 (natitira 0 ) 18/2 = 9 (natitira 0 ) 9/2 = 4 (natitira 1 ) 4/2 = 2 (natitira 0 ) 2/2 = 1 (natitira 0 ) Ngayon ay "kinokolekta" namin ang aming binary na numero sa reverse order. Nakukuha namin ang numerong 10010001. Tapos na! Interesting nuance 1. I-convert natin ang number 1 mula sa decimal system sa binary. Sa binary system, ang numerong ito ay isusulat din bilang 1. Pagkatapos ng lahat, ang huling resulta ng paghahati sa pamamagitan ng 2, na dapat ay katumbas ng 1, ay katumbas na ng numero 1 mismo. 1₁₀ = 1₂ Interesting nuance 2. Let's convert ang numero 0 mula sa decimal system hanggang binary. Sa binary system, ang numerong ito ay isusulat din bilang 0. 0₁₀ = 0₂ 2.1.2 Fractional numbers. Paano i-convert ang mga fractional na numero sa binary? Upang i-convert ang isang decimal fraction sa binary number system, kailangan mong: a) i-convert ang buong bahagi ng fraction sa binary system ayon sa pinag-aralan na algorithm sa talata 2.1.1 b) i-multiply ang fractional na bahagi ng fraction sa 2 , isulat ang resultang digit ng resulta BAGO ang decimal point (laging katumbas ng 0 o 1, na lohikal), pagkatapos ay i-multiply LAMANG ang fractional na bahagi ng resulta na nakuha ng 2 muli, isulat ang resultang digit ng resulta BAGO ang decimal point (0 o 1) at iba pa hanggang sa fractional bahagi ng resulta ng pagpaparami ay nagiging katumbas ng 0 o hanggang sa kinakailangang bilang ng mga decimal na lugar (kinakailangang katumpakan ) (katumbas ng bilang ng pagpaparami ng 2). Pagkatapos ay kailangan mong isulat ang resultang pagkakasunud-sunod ng mga nakasulat na mga zero at ang mga SA ORDER pagkatapos ng puntong naghihiwalay sa integer at fractional na mga bahagi ng tunay (fractional) na numero. Halimbawa 1. I-convert natin ang numerong 2.25 (2 point 25 hundredths) mula sa decimal system patungo sa binary system. Sa binary system ang fraction ay magiging katumbas ng 10.01 . Paano natin nakuha ito? Ang numero ay binubuo ng isang integer na bahagi (hanggang sa isang punto) - ito ay 2 at isang fractional na bahagi - ito ay 0.25. 1) Pagsasalin ng buong bahagi: 2/2 = 1 (natitira 0 ) Ang buong bahagi ay magiging 10 . 2) Pagsasalin ng fractional na bahagi. 0.25 * 2 = 0 .5 (0) 0.5 * 2 = 1 .0 (1) Ang fractional na bahagi ay naging katumbas ng 0 bilang resulta ng sunud-sunod na multiplikasyon sa 2. Huminto kami sa pagpaparami. Ngayon ay "kinokolekta" namin ang fractional na bahagi SA ORDER - nakakakuha kami ng 0.01 sa binary system. 3) Idagdag ang integer at fractional na bahagi - nakuha namin na ang decimal na fraction 2.25 ay magiging katumbas ng binary fraction 10.01 . Halimbawa 2. I-convert natin ang numerong 0.116 mula sa decimal system patungo sa binary system. 0.116 * 2 = 0.232 (0) 0.232 * 2 = 0.464 (0) 0.464 * 2 = 0.928 (0) 0.928 * 2 = 1.856 (1) //itapon ang integer na bahagi ng resultang ito 0.816 * 7 = 1.816 * 2 ) //itapon ang buong bahagi ng resultang ito 0.712 * 2 = 1 .424 (1) //itapon ang buong bahagi ng resultang ito 0.424 * 2 = 0 .848 (0) Gaya ng nakikita natin, patuloy ang multiplikasyon , ang fractional na bahagi ng resulta ay hindi magiging katumbas ng 0. Pagkatapos ay nagpasya kaming iko-convert namin ang aming decimal fraction sa binary na may katumpakan na 7 decimal na lugar (bits) pagkatapos ng punto (sa fractional na bahagi). Alalahanin natin ang pinag-aralan natin tungkol sa mga hindi gaanong kabuluhan - kung mas malayo ang bit (bit) mula sa buong bahagi, mas madali para sa atin na pabayaan ito (paliwanag sa seksyon 1 ng lecture, kung sino ang nakalimutan). Nakukuha namin ang binary fraction na 0.0001110 na may katumpakan na 7 bits pagkatapos ng tuldok. 2.2 Conversion mula sa binary hanggang decimal. 2.2.1 Mga integer. Upang isalin ang kabuuannumero mula sa binary number system hanggang decimal, kinakailangang hatiin ang numerong ito sa mga digit (bits) at i-multiply ang bawat digit (bit) ng numero 2 hanggang sa tiyak na positibong degree (nagsisimula ang pagbilang ng degree na ito mula kanan hanggang kaliwa mula sa hindi gaanong makabuluhan. (right bit) at nagsisimula sa 0 ) . Sa madaling salita, ang kapangyarihan ng dalawa ay katumbas ng bilang ng isang naibigay na bit (ngunit ang hindi nakasulat na panuntunang ito ay magagamit lamang sa kaso ng pag-convert ng mga integer , dahil para sa mga fractional na numero ang pagbilang ng mga bit ay nagsisimula sa fractional na bahagi, na isinasalin. sa sistemang desimal sa ibang paraan ). Susunod na kailangan mong magdagdag ng mga resultang produkto. Halimbawa. I-convert natin ang binary number 110011 sa decimal number system. 110011₂ = 1*2⁵ + 1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º = 32 +16 +0 + 0 + 2 + 1 = 51₁₀ Bilang resulta, nakukuha natin ang numerong 51 sa binary system . Para sa impormasyon, sa ibaba ay isang talahanayan ng mga unang kapangyarihan ng numero 2 . HINDI PA MAGBASA :))) Mga totoong numero sa memorya ng computer.  SA ILALIM NG PAG-UNLAD!!!  - 5 ! Pakitandaan na ang zero power ng isang numero ay palaging 1. 2.2.2 Fractional na mga numero. Upang ma-convert ang isang binary fractional (real) na numero sa decimal , dapat mong: a) i-convert ang integer na bahagi nito sa decimal ayon sa algorithm mula sa talata 2.2.1 ; b) isalin ang fractional na bahagi nito bilang mga sumusunod. Kinakailangang ipakita ang fractional na bahagi bilang kabuuan ng mga produkto ng mga digit sa pamamagitan ng dalawa , na itinaas sa isang tiyak na negatibong kapangyarihan (ang kapangyarihan para sa unang digit pagkatapos ng punto (pagkatapos ng buong bahagi ng fraction) ay magiging katumbas ng -1, para sa pangalawang digit pagkatapos ng punto ay magiging katumbas ng -2, atbp.) Resulta ang halagang ito ay magiging fractional na bahagi ng numero sa decimal system. Halimbawa. I-convert natin ang numerong 10111.01 sa binary system. 10111.01₂ = (1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º) . (0*2ˉ¹ + 1*2ˉ²) = (16 + 0 + 4 + 2 + 1) . (0 + 0.25) = 23.25₁₀ Bilang resulta, nakukuha natin ang numerong 23.25 sa sistema ng decimal na numero. Ang talahanayan ng unang negatibong kapangyarihan ng 2 ay ibinigay sa ibaba. HINDI PA MAGBASA :))) Mga totoong numero sa memorya ng computer.  SA ILALIM NG PAG-UNLAD!!!  - 7 2.2.3 Pangkalahatang formula para sa pag-convert ng mga numero mula sa binary patungo sa decimal. Magbigay tayo ng pangkalahatang formula para sa pag-convert ng mga numero mula sa binary patungo sa decimal (parehong integer at fractional na mga bahagi). HINDI PA MAGBASA :))) Mga totoong numero sa memorya ng computer.  SA ILALIM NG PAG-UNLAD!!!  - 4 kung saan ang A ay isang numero sa binary number system; Ang base ng sistema ng numero ay 2 (ibig sabihin ang bawat bit ay pinarami ng 2 sa kapangyarihan); n— bilang ng mga integer digit (bits) ; m ay ang bilang ng mga fractional digit (bits) ng numero . Ang unang bit ng integer na bahagi mula sa dividing point ay naka-highlight sa pula . Ito ay palaging pinarami ng 2 hanggang sa zero na kapangyarihan. Ang susunod na bit bago ito (sa kaliwa) ay pinarami ng 2 sa unang kapangyarihan, atbp. Ang unang bit ng fractional na bahagi mula sa dividing point ay naka-highlight sa berde . Ito ay palaging pinarami ng 2 hanggang sa minus unang kapangyarihan. Ang susunod na bit sa kanan ay pinarami ng 2 hanggang sa minus na pangalawang kapangyarihan, atbp. 3. Scientific notation: isang normalized na notation sa parehong system. Mantissa, exponent, antas ng exponent. 3.1 Exponential na anyo ng pagsulat ng numero. Noong nakaraan, pinag-aralan namin ang isang detalyadong pamamaraan para sa pag-record ng mga positional na numero sa pamamagitan ng digit. Kunin natin ang numerong 0.000000000000000000016 . Ito ay may napakahabang entry sa karaniwang anyo. At sa exponential form ito ay magiging ganito: 1.6 * 10ˉ²¹ Kaya ano ang exponential form ng isang numero at kung paano kumakatawan sa isang numero sa form na ito? Ang syentipikong notasyon para sa isang numero ay isang representasyon ng mga tunay na numero bilang isang mantissa at exponent . Maginhawa para sa kumakatawan sa napakalaki at napakaliit na mga numero, pati na rin para sa pagkakaisa ng kanilang pagsulat. N = M * pⁿ kung saan ang N ang numerong isusulat, M ang mantissa ng numero, p ang base (katumbas ng base ng number system ng ibinigay na numero), n (integer) ang order (degree , ay maaaring maging positibo at negatibo), p sa kapangyarihan ng n ay ang mga katangiang numero (exponent, i.e. base na itinaas sa isang kapangyarihan (order)). Isang mahalagang nuance. Kung ang integer na bahagi ng decimal na numero ay iba sa 0 , ang pagkakasunud-sunod (degree) ng exponent ay magiging positive , kung ang integer na bahagi ay katumbas ng 0 , ang antas ng exponent ay magiging negatibo . 3.2 Normal at normalized na anyo ng pagsulat ng mga numero. Ang normal na anyo ng isang numero ay isang anyo kung saan ang mantissa (nang hindi isinasaalang-alang ang tanda) ay matatagpuan sa kalahating pagitan [0,1], iyon ay, 0 <= M < 1. Ang anyo ng pagsulat na ito ay may disbentaha: ang ilang mga numero ay nakasulat nang hindi maliwanag (halimbawa, ang 0.0001 ay maaaring isulat bilang 0.000001*10², 0.00001⋅10¹, 0.0001⋅10º, 0.001⋅10ˉ¹ at iba pa). Samakatuwid, ang isa pang anyo ng pag-record ay laganap (lalo na sa computer science) - na-normalize, kung saan ang mantissa ng isang decimal na numero ay kumukuha ng mga halaga mula 1 (kabilang) hanggang 10 (eksklusibo), iyon ay, 1 <= M <10 (katulad nito, ang mantissa ng isang binary na numero ay kumukuha ng mga halaga mula 1 hanggang 2 ). Sa madaling salita, ang mantissa sa decimal system ay dapat na isang fractional number mula 1.0 (inclusive) hanggang 10 (exclusive) , i.e. ang integer na bahagi ng mantissa ay dapat maglaman ng isang digit, at ang fractional na bahagi ay hindi limitado sa matematika. Ang bentahe ng normalized na form ay na, sa gayon, anumang numero (maliban sa 0) ay nakasulat sa isang natatanging paraan. Ang kawalan ay imposibleng kumatawan sa 0 sa form na ito, kaya ang representasyon ng mga numero sa computer science ay nagbibigay ng isang espesyal na sign (bit) para sa numerong 0. 3.3 Mga halimbawa ng pagsulat ng mga decimal na numero sa exponential normalized form. Tingnan natin ang mga halimbawa. Halimbawa 1. Isulat natin ang decimal na numero 1015000 (isang milyon labinlimang libo) sa exponential normalized form. Ang sistema ng numero para sa numerong ito ay decimal, kaya ang base ay magiging 10 . Piliin natin ang mantissa . Upang gawin ito, isipin ang numero bilang isang fraction, ang fractional na bahagi nito ay magiging katumbas ng zero (dahil ang numero ay isang integer): 1000000.0. Kung ang integer na bahagi ng numero ay mas malaki sa 0 , pagkatapos ay ilipat ang punto sa kaliwa ng paunang posisyon nito (sa loob ng integer na bahagi) hanggang sa may isang digit na lang na natitira sa integer na bahagi . Pagkatapos nito ay naglagay kami ng tuldok. Itinatapon namin ang mga hindi gaanong halaga (sa dulo ng numero). Nakukuha namin ang mantissa ng numero na katumbas ng 1.015 . Tukuyin natin ang antas (order) ng base ng numero. Ilang posisyon sa kaliwa ang inilipat ng ating puntong naghihiwalay sa integer at fractional na bahagi? Para sa anim na posisyon. Nangangahulugan ito na ang order ay magiging 6 . Sa kasong ito, ang pagkakasunud-sunod ay positibo (inilipat namin ang punto sa integer na bahagi ng numero na hindi katumbas ng 0). Ang huling entry sa normalized na form: 1.015 * 10⁶ . Maaari naming isulat ang numerong ito sa form na ito: 1.015E6 (kung saan ang E6 ay ang exponent ng isang decimal na numero, iyon ay, 10 hanggang ika-6 na kapangyarihan). Subukan natin ang ating sarili. Ang exponential notation para sa isang numero ay hindi hihigit sa produkto ng isang numero (mantissa) at isa pang numero (exponent). Ano ang mangyayari kung i-multiply mo ang 1.015 sa 10⁶? 1.015*10⁶ = 1.015*1000000 = 1015000 . Tama iyan. Ang diskarte na ito (na-normalize) ay tumutulong na lumikha ng isang hindi malabo na talamga numero sa exponential form, gaya ng ipinahiwatig sa itaas. Halimbawa 2. Isulat natin ang decimal na tunay na numero 0.0098 sa normalized form. I-highlight natin ang base ng numero - ito ay katumbas ng 10 (decimal number system). Piliin natin ang mantissa ng numero - ito ay katumbas ng 9.8 (ang integer na bahagi ng numero ay katumbas ng zero, na nangangahulugang inililipat natin ang punto sa kanan sa unang makabuluhang digit (nakahiga sa saklaw mula 1 hanggang 9 kasama) . Tinutukoy namin ang pagkakasunud-sunod ng numero - inilipat namin ang punto sa pamamagitan ng tatlong posisyon, na nangangahulugang ang pagkakasunud-sunod ay 3. Positibo ba ito negatibo o negatibo? Dahil inilipat namin ang punto sa kanan (sa fractional na bahagi ng numero), ang ang order (power) ay magiging negatibo . Ang huling tala ng numero sa normalized na anyo ay 9.8 * 10ˉ³ o 9.8E-3 . Suriin nating muli ang ating sarili. I-multiply ang 9.8 sa 10ˉ³. 9.8 * 10ˉ³ = 9.8 * 0.001 = 0.098 iyon. Halimbawa 3. Isulat natin ang decimal na tunay na numero 3.56 sa normalized form. Piliin ang base ng numero - ito ay katumbas ng 10 (decimal number system). Piliin ang mantissa ng numero - ito ay katumbas ng... 3.56 (ang integer bahagi ng numero ay isang solong digit, hindi katumbas ng 0. Nangangahulugan ito na ang punto ay hindi kailangang ilipat kahit saan, ang numero mismo ay magiging mantissa.) I-highlight natin ang pagkakasunud-sunod ng base: Sa anong numero dapat ang mantissa , katumbas ng bilang mismo, paramihin upang hindi ito magbago? Kada unit. Nangangahulugan ito na ang order ay magiging zero. Ang huling tala ng numero sa normalized na anyo ay 3.56 * 10º o 3.56E0. 4. Pag-iimbak ng mga totoong numero sa memorya ng computer: lumutang at doble. 4.1 Mga uri ng lumulutang at doble. Lumipat tayo sa pangunahing seksyon ng ating panayam. Tulad ng alam na natin, mayroong dalawang uri ng totoong numero sa Java: float at double . Ang uri ng float ay sumasakop ng 32 bits sa memorya ng computer at maaaring kumuha ng mga halaga sa hanay [3.4E-38; 3.4E+38) (sa madaling salita, sa hanay mula 3.4*10ˉ³⁸ (kasama) hanggang 3.4 * 10³⁸ (hindi kasama)). Mahalagang nuance 1. Ang mga float number ay maaaring maging positibo o negatibo. Ang hanay na ito sa itaas ay ipinakita upang ipahiwatig ang mga module ng mga numero na kasama sa hanay ng float. Mahalagang nuance 2. Ang 10³⁸ ay tinatayang katumbas ng 2¹²⁷ , ayon sa pagkakabanggit, ang 10 ˉ³⁸ ay tinatayang katumbas ng 2ˉ¹²⁷ . Kaya, ang pagitan ng mga ganap na halaga ng mga float number ay maaaring isulat bilang [3.4 * 2ˉ¹²⁷; 3.4 * 2¹²⁷). Ang dobleng uri ay tumatagal ng dalawang beses na mas maraming memorya ng computer -64 bits at maaaring tumanggap ng mga decimal na halaga sa hanay [-1.7E+308; 1.7E+308) ayon sa pagkakabanggit. 4.2 Exponential na normalized na anyo ng mga binary na numero. Alam namin na ang mga numero ay naka-imbak sa binary form sa memorya ng computer. Kaya, kunin natin ang numerong 1560.256 (uri ng float) at i-convert ito sa binary system sa positional form: 11000011000.01000001100 . Maaari mong isipin na ito ay kung paano ito maiimbak sa memorya ng computer. Ngunit hindi iyon totoo! Sa memorya ng computer, ang mga uri ng float at double ( real floating-point na mga uri ) ay naka-imbak sa exponential normalized form , ngunit ang base ng kapangyarihan ay 2 sa halip na 10. Ito ay dahil sa katotohanan na, tulad ng nakasaad sa itaas, ang lahat ng data sa ang computer ay kinakatawan sa binary form (bits ). Ang isang tiyak na halaga ng memorya ng computer ay inilalaan para sa isang numero. Katawanin natin ang positibong numero 15.2 sa normalized exponential form: 1.52*10¹ . Susunod, katawanin natin ang binary na "kambal" nito 1111.00110011001 din sa exponential normalized notation, gamit ang parehong algorithm: 1) Ang base ay magiging katumbas ng 2 2) Ang mantissa ay magiging katumbas ng 1.11100110011001 3) Ang antas ay magiging positibo at pantay. (ang punto ay inilipat ng 3 bits sa kaliwa) sa decimal system. I-convert natin ito sa binary system: 11 . Kaya sa binary exponential normalized form ito ay magiging 1.11100110011001 * 2¹¹. 4.3 Pag-iimbak ng exponential normalized binary form ng float number sa memorya ng computer. Kaya, naisip namin na ang isang tunay na numero ay maiimbak sa memorya ng computer sa exponential normalized binary form . Ano ang magiging hitsura nito sa memorya? Kunin natin ang uri ng float . Ang computer ay naglalaan ng 32 bits para sa bawat float number . Ang mga ito ay ipinamamahagi tulad ng sumusunod . Ang figure na ito ay schematically na nagpapakita ng inilalaan na memorya para sa isang 32-bit float number sa isang computer. HINDI PA MAGBASA :))) Mga totoong numero sa memorya ng computer.  SA ILALIM NG PAG-UNLAD!!!  - 5 Ang bit numbering ay ipinahiwatig sa pula . Ang berde ay nagpapahiwatig ng isang piraso ng inilaan na memorya (1 bit) para sa pag-iimbak ng tanda ng numero. Ang dilaw ay nagpapahiwatig ng isang piraso ng inilalaan na memorya para sa pag-iimbak ng inilipat na kapangyarihan (order) ng exponential form ng numero (8 bits). Asulnagsasaad ng isang piraso ng inilalaang memorya para sa pag-iimbak ng normalized na mantissa ng isang numero na walang implicit unit (23 bits). Tingnan natin nang maigi. 1) Mag-sign bit. Ang pinaka makabuluhang (una mula sa kaliwa) bit ay palaging inilalaan upang iimbak ang tanda ng numero (1 kung negatibo ang numero, at 0 kung positibo ang numero). Ang isang pagbubukod ay maaaring ang numerong zero - sa programming, ang zero ay maaaring parehong negatibo at positibo . 2) Susunod na dumating ang mga piraso ng degree (order) ng exponent na may base 2 . Para dito, 8 bits ang inilalaan. Ang exponent degree ng mga float number , gaya ng alam natin, ay maaaring parehong negatibo (para sa mga numero na ang bahagi ng integer ay 0, tingnan ang talata 3.3) at positibo (para sa mga numero na ang bahagi ng integer ay iba sa zero) at mula 2ˉ¹²⁷ hanggang 2¹²⁷ . Sa teorya, dapat tayong maglaan ng isang bit upang matukoy ang tanda ng exponent, tulad ng kaso sa sign bit. Ngunit hindi iyon totoo. Upang hindi mag-aksaya ng kaunti sa pagtukoy sa tanda ng exponent, ang mga float number ay nagdaragdag ng offset sa exponent na kalahating byte +127 (0111 1111). Kaya, sa halip na isang hanay ng mga kapangyarihan mula 2ˉ¹²⁷ hanggang 2¹²⁷, ang computer ay nag-iimbak ng isang hanay ng mga kapangyarihan mula 0 hanggang +254 - lahat ng mga halaga ng kapangyarihan ay positibo , hindi na kailangang mag-aksaya ng dagdag na byte sa sign. Ito ay lumiliko na ang halaga ng exponent ay inilipat ng kalahati na nauugnay sa posibleng halaga. Nangangahulugan ito na upang makuha ang aktwal na halaga ng exponent, dapat mong ibawas ang offset na ito mula sa halagang nakaimbak sa memorya. Kung ang halaga ng exponent na nakaimbak sa memorya ay mas mababa sa offset (+127), kung gayon ang exponent ay negatibo: ito ay lohikal. Halimbawa. Magsagawa tayo ng shift ng negatibong degree -18 . Idinagdag namin ang offset na +127 dito, nakukuha namin ang halaga ng degree +108 (huwag kalimutan ang degree 0 sa pagkalkula). I-convert natin ang degree sa binary form: 1101100 Ngunit 8 bits ng memory ang inilalaan para sa degree, at dito nakakakuha tayo ng 7-bit na numero. Sa halip na walang laman, walang tao na mataas na digit (bit), ang computer ay nagdaragdag ng 0. Ang resulta ay ang antas na ito ay maiimbak sa memorya ng computer bilang 01101100 . Tingnan natin: +108 < +127, na nangangahulugang negatibo ang antas. Isaalang-alang ang sumusunod na kawili-wiling talahanayan: Ipinapakita nito ang lahat ng posibleng halaga ng mga kapangyarihan ng mga normalized na anyo ng mga float number sa binary at decimal system. Tulad ng nakikita natin, sa binary system +127 ay eksaktong kalahati ng isang buong byte (8 bits). 3) Ang natitirang 23 bits ay nakalaan para sa mantissa HINDI PA MAGBASA :))) Mga totoong numero sa memorya ng computer.  SA ILALIM NG PAG-UNLAD!!!  - labing-isa. Ngunit para sa isang normalized binary mantissa, ang pinaka makabuluhang bit (aka ang integer na bahagi ng normalized na mantissa) ay palaging katumbas ng 1 (tinatawag na implicit one ), dahil ang bilang ng mantissa ay nasa hanay na 1<=M<2 (at alalahanin din ang talata 2.1.1 ng panayam). Ang tanging pagbubukod ay ang numero 0. Walang punto sa pagsulat ng isang yunit sa inilaan na 23 bits at pag-aaksaya ng memorya, kaya ang natitira sa mantissa (ang fractional na bahagi nito) ay nakasulat sa inilaan na 23 bits. Lumalabas na ang mahalagang bahagi ng float number ay may haba na 24, kung saan mas kaunting bit ang nakaimbak. Isang mahalagang nuance. Tandaan natin na kapag nagko-convert ng mga decimal fractional na numero sa binary na mga numero, ang fractional na bahagi sa binary system ay madalas na naging malaki. At mayroon lang kaming 32 bits para mag-imbak ng float number. Sa kasong ito, ang pinakamababa, hindi gaanong makabuluhang mga digit ng binary fraction (tandaan ang talata 2.1.2 ng lecture na ito) ay hindi isasama sa inilalaan na memorya at ang computer ay magpapabaya sa kanila . Ang katumpakan ng numero ay mawawala , ngunit, makikita mo, ito ay minimal. Sa madaling salita, ang katumpakan ng mga fractional float ay 6-7 decimal na lugar. 4.4 Pag-iimbak ng exponential normalized binary form ng dobleng numero sa memorya ng computer. Ang mga totoong numero ng dobleng uri ay iniimbak sa memorya ng computer sa parehong paraan tulad ng mga float number, maliban sa ilang mga katangian. Ang dobleng numero ay may 64 bits sa memorya ng computer. Ibinahagi ang mga ito tulad ng sumusunod (ayon din sa pagkakasunud-sunod mula kaliwa hanggang kanan): 1) Sign bit (tingnan ang talata 4.3). Naiintindihan namin na ang bilang ng bit na ito ay magiging 63 . 2) Degree (order). Ang mga dobleng numero ay inilalaan ng 11 bits upang iimbak ito . Isinasagawa rin ang isang degree shift , ngunit para sa dobleng numero ito ay magiging katumbas ng +1023. 3) Mantissa (makabuluhang bahagi). Ang mga dobleng numero ay inilalaan ng 52 bits (digit) upang iimbak ito. Gayundin, ang eksaktong integer na bahagi ng mantissa ( implicit unit ) ay hindi nakaimbak sa memorya . Dapat ding tandaan na ang katumpakan ng fractional doubles ay humigit-kumulang 16 na decimal na lugar . 4.5 Mga halimbawa ng kumakatawan sa isang tunay na numero ng decimal system sa memorya ng computer. At ang huling punto ng aming panayam ay isang halimbawa ng pag-convert ng fractional number ng decimal number system sa anyo ng storage nito sa memorya ng computer upang pagsamahin ang pag-unawa sa paksa. Halimbawa 1. Kumuha ng numero-4.25 na uri ng float. Ipakita natin ito sa exponential normalized form sa binary number system, na inaalala ang lahat ng ating tinalakay sa lecture na ito. 1) I-convert ang integer na bahagi ng numero sa binary form: 4/2 = 2 (natitira sa division 0 ) 2/2 = 1 (natitira sa division 0 ) Ang integer na bahagi ay magiging katumbas ng 100 sa binary system. 2) I-convert ang fractional na bahagi ng numero sa binary form. 0.25*2 = 0.5 ( 0 ) 0.5*2 = 1.0 ( 1 ) Ang fractional na bahagi ay magiging katumbas ng 0.01 sa binary system. 3) Kaya, -4.25₁₀ = -100.01₂ . 4) I-convert natin ang numerong -100.01₂ sa exponential normalized form sa binary number system (na nangangahulugang ang base ng power ay 2). -100.01₂ = -1.0001 *2² I-convert natin ang halaga ng degree mula sa decimal na format patungo sa binary . 2/2= 1 (natitira 0 ) Ang degree ay 10₂. Nakuha namin na ang numerong -4.25₁₀ sa binary exponential na normalized na form nito ay magiging katumbas ng -1.0001 * 2¹º Isulat natin kung ano ang magiging hitsura nito sa memorya ng computer. Ang sign bit ay magiging 1 (negatibong numero). Ang exponent offset ay katumbas ng 2+127 = 129₁₀ = 10000001₂ Inalis namin ang implicit na isa mula sa mantissa , nakakakuha kami ng 000100000000000000000000 ( pinupunan namin ng mga zero ang hindi nasakop na low-order bits ). Bottom line. 1 10000001 00010000000000000000000 - ito ay kung paano iniimbak ang numero -4.25 sa memorya ng computer. Halimbawa 2. I-convert ang float number 0.75₁₀ sa isang binary storage format sa memory ng computer. Ang resulta ay dapat na 0 01111110 100000000000000000000000 . Salamat sa atensyon.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION