Mazmuny:
Surat: http://pikabu.ru/
Giriş
Java-y öwrenen ilkinji günlerimde ýüzýän nokatlar ýaly gyzykly başlangyç görnüşlerine duş geldim. Derrew olaryň aýratynlyklary, hasam beteri, ikilik kodda ýazylyşy (biri-biri bilen baglanyşykly) bilen gyzyklandym. Islendik bitewi sanlardan tapawutlylykda, hatda gaty kiçi aralykda-da (mysal üçin, 1-den 2-e çenli) olaryň çäksiz sany bar. Memoryadyň çäkli bolmagy bilen bu toplumy aňlatmak mümkin däl. Onda ikili görnüşde nähili beýan edilýär we nähili işleýärler?
Haýp, wikidäki düşündirişler we
bu ýerdäki Habré hakda gaty gowy makala , düýbüni tutandyklaryna garamazdan maňa doly düşünmedi. Düşünmek, diňe şu
derňew makalasyny irden okanyňyzdan soň ýüze çykdy.
Taryha gezelenç
.
_ _ _ _ Her kompýuter muny başgaça etdi we hersiniň öz ýalňyşlyklary bardy. 70öne 70-nji ýyllaryň ortalarynda Intel goldanýan “kämilleşdirilen” arifmetika bilen täze prosessorlary ýasamak we şol bir wagtyň özünde standartlaşdyrmak kararyna geldi. Ony ösdürmek üçin professorlar William Kahan we Jon Palmer (ýok, piwo hakda kitaplaryň awtory däl) getirildi. Käbir drama bardy, ýöne täze standart döredildi. Indi bu standart IEEE754 diýilýär
Loüzýän nokadyň belgisi
Mekdep okuw kitaplarynda-da 1,2 × 1000 = 1200 deň bolan
1,2 × 10 3 ýa-da
1,2 E3 görnüşdäki gaty uly ýa-da gaty az sanly ýazuw usuly bilen ýüzbe-ýüz boldy . Muňa ekspensial bellik usuly diýilýär.
Bu ýagdaýda, N = M × n p formulasyny ulanyp , san aňlatmasy bilen iş salyşýarys
- N = 1200 - emele gelen san
- M = 1,2 - mantissa - sargytlary hasaba almazdan fraksiýa bölegi
- n = 10 tertip esasydyr. Bu ýagdaýda we kompýuterler hakda aýdanymyzda, esas 10-njy belgidir
- p = 3 - esasy dereje
Köplenç buýrugyň esasy 10 hasaplanýar
we diňe mantissa we bazanyň bahasy ýazylýar we olary
E harpy bilen bölýär. Mysal üçin,
1,2 × 10 3 we
1.2 E3 ekwiwalent ýazgylar berdim , hemme zat düşnükli bolsa we nostalgiki ekskursiýany mekdebiň okuw meýilnamasyna tamamlasak, indi muny ýatdan çykarmagy maslahat berýärin, sebäbi ýüzýän nokat belgisini emele getirenimizde ikisiniň güýji, onlarça däl, ýagny
n = 2 , 1.2E3 sazlaşykly formulanyň hemmesi bozulýar we beýnimi hakykatdanam döwdi.
Gol we dereje
Bizde näme bar? Netijede, mantisadan ybarat ikilik sanymyz bar
- bir güýje we güýjüň özüne göterjek bölegimiz. Mundan başga-da, bitewi görnüşlerde bolşy ýaly, ýüzýän nokatlaryň sanlary belgini kesgitleýär - san polo positiveitel ýa-da otrisatel bolar. Mysal hökmünde
float
32 bitden ybarat görnüşini göz öňünde tutmagy teklip edýärin. Iki gezek takyk sanlar bilen
double
logika birmeňzeş, diňe iki esse köp. 32 bitden iň möhümi belgä bölünýär, indiki 8 bit eksponente - mantisany ýokarlandyrjak güýjümiz, galan 23 bit bolsa mantisada paýlanýar. Görkezmek üçin bir mysala seredeliň:
Birinji bit gaty ýönekeý. Birinji bitiň bahasy
0 bolsa , alýan sanymyz polo
beitel bolar . Eger bit
1 bolsa , onda san
negatiw bolar . 8 bitiň indiki bloky eksponent blokudyr.
Eksponent adaty sekiz bitli san hökmünde ýazylýar we zerur dereje almak üçin emele gelen belgiden
127 aýyrmaly . Biziň ýagdaýymyzda, eksponentiň sekiz biti
10000001 .
Bu 129 belgä gabat gelýär . Muny nädip hasaplamalydygy barada soragyňyz bar bolsa, surat çalt jogaby görkezýär. Giňeldilen wersiýany islendik Boolean algebra kursynda alyp bolýar.
1 × 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 Bu 8 bitden alyp boljak iň köp mukdaryň 11111111 2 = 255 10 ( 2-nji we
10 -njy ýazgy ikilik we onluk san ulgamlaryny aňladýar) hasaplamak kyn däl , ýöne diňe oňyn eksponent bahalaryny ulansak (
0-dan 255-e çenli ), onda emele gelen sanlar onluk nokatdan öň köp sanly bolar, ýöne soň däl?
Derejäniň negatiw bahalaryny almak üçin döredilen eksponentden 127 aýyrmaly . Şeýlelik bilen, derejeleriň diapazony
-127-den 128-e çenli bolar . Mysalymyzy ulanyp, zerur dereje
129-127 = 2 bolar . Geliň häzirlikçe bu belgini ýada salalyň.
Mantissa
Indi mantissa hakda. 23 bitden ybarat, ýöne başynda bitler bölünmeýän başga bir bölüm bar. Bu maksada laýyklyk we ykdysadyýet sebäpli edilýär. Şol bir san, onluk nokatdan öň ýa-da soň mantisada nol goşmak bilen dürli güýçlerde aňladylyp bilner. Muňa düşünmegiň iň aňsat usuly onluk eksponent bilen:
120,000 = 1,2 × 10 5 = 0.12 × 10 6 = 0.012 × 10 7 = 0,0012 × 10 8 we ş.m. Şeýle-de bolsa, mantisanyň kellesine belli bir san girizip, her gezek täze sanlary alarys. Geliň, 23 bitimizden ozal ýene biri bolar diýip kabul edeliň. Adatça bu bit galanlardan nokat bilen bölünýär, ýöne bu hiç zady aňlatmaýar. Has amatly 1. 111000000000000000000000
Indi emele gelen mantisany her ädim bilen bir gezek azaldyp, çepden saga bir güýç ýokarlandyrmaly. Hasaplamagyň netijesinde alan güýjümiziň bahasyndan başlaýarys, ýagny
2 (iki güýjüň her bahasyny ýazmazlyk üçin bilgeşleýin ýönekeý bir mysal saýladym we olary ýokardaky tablisada hasaplamadym degişli bit nol)
1 × 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 we 7.5 netijesini aldyňyz , dogrulygyny barlap bilersiňiz, mysal üçin
şu baglanyşykda
Netijeler
Adaty ýüzýän nokat belgisi
float
32 bitden durýar, birinji bit belgidir (+ ýa-da), indiki sekiz görkeziji, indiki 23-si mantissa Belgi bilen - 0 bit pozitiw san bolsa. 1-nji bit negatiw bolsa.
Ekspensial boýunça - bitwise onluk sana öwürýäris (çepden birinji bit
128 , ikinjisi
64 , üçünjisi
32 , dördünji
16 , bäşinji
8 , altynjy
4 , ýedinji
2 , sekizinjisi
1 ), emele gelen sandan
127 aýyryň , başlajak derejämizi alarys.
Mantisanyň pikiriçe - öňdäki bar bolan 23 bite 1 bahasy bilen başga bir zat goşýarys we ondan alýan güýjümizi her bit bilen azaldyp, alýan güýjümize göterip başlaýarys.
Bu adamlar, çagalar! PS: Öý işi hökmünde, bu makalany ulanyp, ýüzýän nokatlar bilen köp sanly arifmetiki amallar bilen takyk ýalňyşlyklaryň näme üçin ýüze çykýandygy baradaky wersiýalaryňyzy teswirlerde goýuň.
GO TO FULL VERSION