Top Banner
FLOATING POINT ARITHMETIC Aritmetika u pokretnom zarezu
23

Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Jan 04, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

FLOATING POINT ARITHMETIC

Aritmetika u pokretnom zarezu

Page 2: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Dogovor

Zarez Tačka

Page 3: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Konvencija

Page 4: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Kako smo do sada predstavljali brojeve?

Računari su namenjeni radu s brojevima

Koje brojeve možemo predstaviti sa N bita?

Unsigned integers:0 to 2N - 1

Signed integers (komplement dvojke)-2(N-1) to 2(N-1) - 1

Možemo posmtrati kao zapis sa fiksnom pozicijom tačke na poslednjem mestu

Page 5: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Šta sa ostalim brojevima?

Kako predstaviti Veoma velike brojeve? (broj sekundi u veku)

3,155,760,00010 (3.1557610 x 109)

Veoma male brojeve? (prečnik atoma)0.0000000110 (1.010 x 10-8)

Racionalne brojeve 2/3 (0.666666666. . .) Iracionalni brojeve 21/2

(1.414213562373. . .) Transcedentalne brojeve e (2.718...), (3.141...)

Svi su zastupljeni u praktičnoj primeni

Page 6: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Iracionalni i imaginarni brojevi

Page 7: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Dogovorom tačku fiksno pomerimo na određenu poziciji

Sa 32 bita i zarezom na sredini: Opseg

Signed -32768 do ≈32767 Unsigned 0 do ≈65536

Rezolucija (najmanji korak/kvant): ≈15.26 x 10-6

Jednostavno rešenje - fixed point

Page 8: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Fixed point

Koristimo celobrojnu ALU Sabiranje/oduzimanje direktno Množenje

Važi ukoliko nema prekoračenja opsega (overflow)

Page 9: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Rešenje?

Dinamički opseg (odnos najvećeg i najmanjeg broja) definisan na isti način kao i za integer

20log10(2(N-1)) = 6dB*(N-1) Za N=32 signed DNR ≈ 187dB

Često nedovoljan u naučnim primenama Koliko je bita potrebno za istovremeno predstavljanje

1x1020 1x10-20

Odgovor: log2(max/min) ≈ 133

VEOMA SKUPO

Page 10: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Eksponencijalna notacija (decimalna)

Reprezentacije se razlikuju u poziciji decimalne tačke (zareza) – “tačka pliva” levo ili desno (praćeno promenom vrednosti eksponenta).

Ekvivalentne reprezentacije broja 1234 123400.0 x 10-2

12340.0 x 10-1

1234.0 x 100

123.4 x 101

12.34 x 102

1.234 x 103

0.1234 x 104

123400.0 x 10-2

12340.0 x 10-1

1234.0 x 100

123.4 x 101

12.34 x 102

1.234 x 103

0.1234 x 104

Normalizovana forma:• nema vodećih nula• tačno jedna cifra levo od decimalne tačke

Page 11: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Elementi broja u pokretnom zarezu

-1.3274 x 10-2

Znak mantise

Pozicija decimalne tačkeMantisa

Eksponent

Znakeksponenta

Osnova (baza)

Normalizovana forma

Page 12: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Eksponencijalna notacija – dec vs bin

Računari rade isključivo sa binarnim ciframa

3.12510 x 101 31.2510

1.1111012 x 24 11111.01224 23 22 21 20 2-1 2-2

4

1

Page 13: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

IEEE 754 Standard

Najrašireniji standard za reprezentaciju brojeva u pokretnom zarezu

Single precision: 32 bita, sastoji se od... Znak bit (1 bit) Eksponent (8 bita) Mantisa (23 bita)

Double precision: 64 bita, sastoji se od… Znak bit (1 bit) Eksponent (11 bita) Mantisa (52 bita)

Page 14: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Single precision format

float tip u C-u Mantisa je normalizovana Sadrži “skriveni bit” sa leve strane Skriveni bit uvek ima vrednost 1 Primer:

manitsa predstavlja

Eksponent Mantisa

32 bita

Znak1 bit 8 bit 23 bit

10100000000000000000000

1.1012 = 1.62510

Page 15: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Single precision format

Eksponent je neoznačen Koristi takozvanu pomerenu notaciju (eng.

biased notation) Realnu vrednost eksponenta dobijamo

oduzimanjem ofset vrednosti od sačuvane vrednosti

SP offset 127 FP offset 1023

Primer: eksponent predstavlja

10000011

131 - 127 = 4

Page 16: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Normalizovane vrednosti

Single precision

Važi za vrednosti polja eksponenta [1..254], takozvane normalizovane vrednosti

0 10000010 11000000000000000000000

1.112

130 – 127 = 3

0 = pozitivna mantisa

+1.112 x 23 = 1110.02 = 14.010

Page 17: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Denormalizovane vrednosti

Uslov Vrednost polja eksponenta je 000…0

Vrednosti Realna vrednost eksponenta je E = -ofset + 1 Skriveni bit ima vrednost 0

Slučajevi Mantisa je 000…0

Predstavlja vrednost 0 Dve oznake za 0 (+0 i -0)

Mantisa različita od 000…0 Brojevi bliski nuli Gubitak preciznosti sa smanjenjem vrednosti

Page 18: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Specijalne vrednosti

Uslov Vrednost polja eksponenta je 111…1

Slučajevi Mantisa je 000…0

Predstavlja vrednost ∞ (beskonačno) Zamena za prekoračenje Primeri: 1.0/0.0 = 1.0/0.0 = +∞, 1.0/-0.0 = -∞

Mantisa različita od 000…0 Nije brojna vrednost - Not-a-Number (NaN) Slučajevi kada numerička vrednost nije

određena Primeri: sqrt(–1), ∞ - ∞

Page 19: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Raspored vrednosti

-15 -10 -5 0 5 10 15

Row 16 Row 18 Row 20

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

Row 16 Row 18 Row 20

Primer: 6-bitni format• 3 bita eksponent• 2 bita mantisa

Page 20: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Osobine

Poređenje FP vrednosti Gotovo da se može koristiti unsigned integer

poređenje Moraju se prvo porediti znaci Problematične ne-brojne vrednosti (NaN)

Preciznost Širina mantise

Dinamički opseg Širina eksponenta

SP: 1.4x10–45 3.4x10+38 DNR ≈ 1668dB

DP: 4.9x10–324 1.8x10+308 DNR > 12000dB

Page 21: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Specifičnosti

Sabiranje nije asocijatovno! Probajte u Matlab || Octave || Python || Julia.

Single precision Niz: 1x106, -1x106 , 1x10-1

Nepostojanje klasičnog overflow-a Moguć underflow Operacije znatno složenije za

implementaciju (skuplje) u odnosu na odgovarajuće celobrojne

Često nisu zastupljene u procesorima namenjenim embedded sistemima

Page 22: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Microblaze FP aritmetika

Opciona FPU HW podrška za IEEE754 single precision Dva nivoa složenosti

Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float)

Ne nudi podršku ze denormalizovane operande

Potrebno pažljivo kodovanje kako bi se iskoristila HW akceleracija

Za više detalja pogledati MicroBlaze Processor Reference Guide

Page 23: Aritmetika · Sabiranje, oduzimanje, množenje, deljenje, poređenja Kvadratni koren, konverzija (int float) Ne nudi podršku ze denormalizovane operande Potrebno pažljivo kodovanje

Pitanja?