2.02M
Category: electronicselectronics

Skaitļu formāti. Peldošais punkts

1.

Ievads datoru arhitektūrā
DST203
3. lekcija
Skaitļu formāti. Peldošais punkts
Asoc.prof., Dr.sc.ing, Dmitrijs Bļizņuks
1

2.

Saturs
Peldošais punkts binārā sistēmā
IEEE 754 standarts
IEEE 754 speciālie gadījumi un kļūdas
2

3.

Datu formāti
3
3

4.

Kā norādīt punktu izmantojot tikai 0 un 1?
Noteikt fiksēto ciparu (bitu) pirms un pēc komata?
– XX.YY? 65535.65535-1 65535,0000152
– Nav efektīvi, jo ierobežo gan maksimālo vērtību, gan precizitāti.
Izveidot divus atsevišķos tipus priekš lieliem skaitļiem un maziem?
– A) X.YYY -> 255.16777216-1 -> 255.0000000596
– B) XXX.Y
– Nav ērti, neatrisina problēmu
Definēt punkta atrāšanas pozīciju ar atsevišķo kodu līdzīgi kā String formātam?
– Zaudējam vienu baitu
4
4

5.

Peldoša punkta (komata) formāti
C# tips
Aptuvēns diapazons
−45
float
±1,5 x 10
double
±5,0 × 10
decimal
±1,0 x 10
to
Precizitāte
±3,4 x 10
−324
to ±1,7 × 10
-28
to ±7,98 x 10
38
308
28
Izmērs
~6-9 cipari
4 baiti
~15-17 cipari
8 baiti
28-29 cipari
16 baiti
5
5

6.

Peldoša punkta (komata) neprecizitāte
6
6

7.

Peldošais punkts binārā formātā
Pieņemsim ka mums jāpārveido 252,390625 binārajā kodā
Pārveidojam 252 binārajā formā, 252 = 11111100
Nākamā darbība ir pārveidot 0,390625 binārajā formā. Lai to veiktu
mēs reizināsim ar 2 un rezultātā pierakstīsim to kas ir kreisajā
pozīcijā
0,390625 * 2 = 0,78125
0,78125 * 2 = 1,5625
0,5625 * 2 = 1,125
0,125 * 2 = 0,25
0,25 * 2 = 0,5
0,5 * 2 = 1,0
0
0
1
1
0
0
1
Atbilde: 11111100,011001
7
7

8.

Piemērs
Kā attēlojas 3,625 binārajā formā?
011,101
Kā attēlojas 0,1 binārajā formā?
0,1 * 2 = 0,2
0,2 * 2 = 0,4
0,4 * 2 = 0,8
0,8 * 2 = 1,6
0,6 * 2 = 1,2
0,2 * 2 = 0,4
… bezgalīgi
Līdzīgs princips ir citos skaitļošanas sistēmās. Jāreizina ar skaitļošanas sistēmas bāzi.
8
8

9.

Binārais uz decimālo
Binārais uz decimālo: 1100,0110012 = ?10
Pārveidot 11002 viegli:
11002 = 0 * 20 + 0 * 21 + 1*22 + 1*23 = 4+8 = 1210
Daļskaitli ,011001 nepieciešams reizināt un summēt,
bet jāsāk ar 2-1
,011001 = 0*2-1+1*2-2+1*2-3+0*2-4+0*2-5+1*2-6
Saskaitot kopā:
= 1 / 4 + 1 / 8 + 1 / 64
= 0,25 + 0,125 + 0,015625
= 0,390625
Galā rezultāts 12,39062510
9
9

10.

Piemērs
Pārveidot no binārā uz decimālo 100,11012 = ?10
Veselā daļa — 1002 = 4 10
Daļskaitlis — ,11012 = 1/2 +1/4 +1/16 = 0,5 + 0,25 + 0,0625 = 0,8125 10
Saskaitot kopā — 4,8125 10
10
10

11.

Zinātniskais pieraksts (normālforma)
Paņemsim decimālo skaitļi 201,0910
To var arī pierakstīt kā 00201,090010
Jānoskaidro, kuri cipari ir zīmīgie:
– Jebkurš nē nulles cipars vienmēr ir zīmīgs,
– Nulle nav zīmīgā ja atrodas pa kreisi no veselas daļas un pa labi no
daļskaitļa.
Jāpārnes komatu tā, lai pirms komata (veselā daļā) būtu
viens zīmīgs cipars un jāsareizina ar 10n, lai rezultāts
nemainītos.
2,010900 * 102
Daļskaitlī ir līdzīgi, bet jāreizina ar 10-n
0,00020109 = 2,0109 * 10-4
987600*100 = 98760*101 = 9876*102
11
11

12.

IEEE 754 formāts
Lai attēlot skaitļi IEEE 754 formāta, jāpārveido
binārā zinātniskā pierakstā
Piemēram:
• 0,1562510 = 0,001012
• 1,01 * 2-3
Sastāvdaļas: (Zīme) * (Mantisa) * 2 (eksponenta)
Standartformā (‘single precision’) ir 32 biti:
12
12

13.

IEEE 754 formāts
Eksponenta satur 8 bitus, tātad var glabāt skaitļus 0 līdz 255
Kā saglabāt negatīvo eksponenti, lai attēlo skaitļus mazākus par 0?
Tāpēc eksponenta tiek nobīdīta par 127
Nobīdīta eksponenta = 127 + sākotnēja eksponenta
Nobīdīts Dec.
Binārais
0
127 +
0 = 127
01111111
1
127 +
1 = 128
10000000
2
127 +
2 = 129
10000001
128
127 + 128 = 255
11111111*
-1
127 –
01111110
Dec.
-127
1 = 126
127 – 127 =
0
00000000*
13
13

14.

IEEE 754 formāts
Piemērs 1,001011* 23
Eksponenta – 3
Izmantojot nobīdi 127, tiek saglabāts 127+3 = 13010 vai 100000102
0 10000010 MMMMMMMMMMMMMMMMMMMMMMM
1
8
23
Mantisa
0 10000010 10010110000000000000000
1
8
23
14
14

15.

IEEE 754 formāts
Zinātniskā pierakstā nulle nekad nebūs kā pirmā zīmīgā
Tātad pirmais zīmīgais cipars vienmēr būs 1
Tāpēc nav nepieciešams vienmēr attēlot šo 1. To neattēlo un sauc
par “slēpto bitu” (’hidden bit’)
Tas ļauj iegūs papildus vienu precizitātes bitu
Rezultātā mantisa skaitlim 1,001011* 23
0 10000010 00101100000000000000000
1
8
23
15
15

16.

Apkopojot
Zīmes bits = 0
Eksponenta = 10000010
Mantisa = 00101100000000000000000
Vai: 0100 0001 0001 0110 0000 0000 0000 00002
Vai: 41 16 00 0016
16
16

17.

Piemērs
Pārveidojām –10,4375 IEEE 754 formātā
Atbilde
1 10000010 01001110000000000000000
1
8
23
17
17

18.

Speciālie gadījumi
Ir nepieciešams attēlot dažus speciālus gadījumus:
– +/- bezgalība,
– precīzi nulli,
– kļūdu.
Speciālos gadījumus attēlo, ierakstot eksponentē vienādus ciparus 0 vai 1
S
S
11111111
00000000
MMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMM
18
18

19.

Speciālie gadījumi. Denormālizētie skaitļi
Pirmais speciālais gadījums ir denormālizēts skaitlis, kas ļauj palielināt precizitāti
S
00000000
MMMMMMMMMMMMMMMMMMMMMMM
Kad eksponenta ir 2-127, tas vairs nav tipisks peldošā punkta skaitlis
Tas ļauj attēlot mazus skaitļus starp 0 un 1*2-126, to sauc par pakāpēnisko
izzudumu (‘gradual underflow’),
19
19

20.

Speciālie gadījumi. Denormālizētie skaitļi
Lai izskaidrot, apskatīsim netipisko formātu ar 8 bitiem, nevis 32
Eksponentē ir 4 biti un mantisā – 3
20
20

21.

Speciālie gadījumi. Precīzi nulle
S
00000000
00000000000000000000000
Tikai tā var attēlot precīzi nulli
Sanāk 0 * 2-126, kas ir 0
21
21

22.

Speciālie gadījumi. Bezgalība
Aizpildot eksponenti ar 1 un mantisu ar 0, tiek attēlota bezgalība
Atkarībā no zīmes bita, tā var būt pozitīvā vai negatīvā
S
11111111 00000000000000000000000
Eksponentei būtu jābūt 255 – 127, kas rezultātā dod 128, bet šāda
eksponenta ir rezervētā bezgalībai,
Pozitīvā bezgalība: 0 11111111
00000000000000000000000
Negatīvā bezgalība: 1 11111111
00000000000000000000000
22
22

23.

Speciālie gadījumi. NaN
Trešais speciālais gadījums ir kad eksponentes laukā ir visi 1 bet mantisa ir
atšķirīga no nulles vērtība. Šis gadījums tiek saukts par NaN (Not a Number);
Šajos gadījumos zīme netiek ņemta vērā;
NaN iegūst dalot 0 ar 0 vai citos nedefinētas aritmētikas gadījumos (tomēr dalot
kaut ko ar 0 iegūstam bezgalību);
Not a Number (NaN): X 11111111 XXXXXXXXXXXXXXXXXXXXXXX
23
23

24.

Speciālie gadījumi. Apkopojums
24
24

25.

25
25

26.

Peldoša punkta kļūdas
Ja mums ir vienāds bitu skaits, tad peldošais punkts būs neprecīzāks
nekā veselo skaitļu formātam ar tādu pašu bitu skaitu
Piemēram 8 bitu gadījumā ar nenobīdītu eksponenti un bez speciālajiem
gadījumiem (bet ar slēpto bitu):
EEE MMMMM
3
5
Gadījumā ja eksponente un mantisa satur tikai 0 tad tas ir 1,0 * 20 = 1
Gadījumā ja eksponente un mantisa satur tikai 1 tad tas ir 1.11111* 27
=11111100 jeb 252

Gadījumā ja eksponente un mantisa satur tikai 0, mazākais ko var
attēlot ir 1,000002 * 20 tātad 1,

Gadījumā ja eksponente un mantisa satur tikai 1, tad lielākais ko var
attēlot ir 1,11111 2 * 27 tātad 252,
Protams peldošais punkts var attēlot daļas ko savukārt nevar veselie
skaitļi
26
26

27.

Peldoša punkta kļūdas
Ja lielākais skaitlis ir 252, kāds būtu tuvākais?
Binārā formā 111 111102
Kas ir 1,11110 * 27 = 111110002 vai 248
Tiek zaudēti četri veselie skaitļi;
Nākošais tuvākais būtu: 111 111012
Kas ir 1,11101 * 27 = 111101002 vai 244
Un vēl četri veselie skaitļi
Lielākām vērtībām ir maksimāls zaudējums, jo to pastiprina
eksponente
27
27

28.

Peldoša punkta kļūdas
Dēļ noapaļošanas mantisas un eksponentes laukos ir iespējami gadījumi
kad peldoša punkta skaitļi nebūs identiski
Tas ir līdzīgi kā gadījumā ar 0.210 attēlošanu binārā kodā
Piemēram pieskaitot 0.2 kādam skaitlim 100,000 reizes rezultātā neiegūs
pieaugumu par 20 000
Šī iemesla dēļ lietojot peldoša punkta aritmētiku nākas pārbaudīt skaitļus
kādās robežās (piemēram, >=19999.99 un <= 20000.01)
28
28

29.

Peldoša punkta operācijas
1.
Pirmā darbība ir pārbaudīt vai kāds no operandiem nav 0 (vai cits
speciāls gadījums). Ja ir tad rezultāts ir zināms uzreiz.
2.
Saskaitīšanas vai atņemšanas gadījumos jāsaskaņo mantisas, jo nevar
veikt darbību ja operandu eksponentes ir dažādas.
3.
Veikt darbības ar mantisām.
4.
Normalizēt rezultātu. Pārbaudot vai nav iegūts kāds izņēmums – izzūdi
(underflow) vai pārpildīšanās (overflow).
5.
Reizināt ir vieglāk jo vajag tik saskaitīt eksponentes un sareizināt
mantisas.
6.
Dalīšanas gadījumā vajag atņemt eksponentes un izdalīt mantisas.
29
29

30.

Papildus materiāli
http://en.wikipedia.org/wiki/Computer_number_format
http://en.wikipedia.org/wiki/Floating_point
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
30
30
English     Русский Rules