Keresés

Aktív témák

  • rudi

    nagyúr

    válasz rudi #76 üzenetére

    Elnézést kell kérnem FreeMtől! A szerkesztve feliratok NEM ŐMIATTA VANNAK, a fórumozó motoron fejlesztettek! Sorry még egyszer.

  • Power

    senior tag

    válasz rudi #56 üzenetére

    ''akkor most elvileg van olyan egész szám amit nem lehet FP16on ábrázolni pontosan mantisszából?''

    Már, hogyne volna?
    Mivel csak 3 tizedesjegy pontosságú ezért egy csomó lehet.
    pl. minden olyan 2048 feletti egész szám pontatlanul ábrázolhatatlan ami páratlan.
    4096 felett már elég, ha nem osztható maradék nélkül 4-gyel és így tovább.

    Az pontosság szempontjából teljesen mindegy, hogy egész vagy sem, csak az számít, hogy hány 2-edesjegyen fér el.
    A 0,1 például 2-es számrendszerben végtelen 2-edes tört, azaz nem ábrázolható teljesen pontosan, míg 0,015625 hiba nélkül ábrázolható.

    ''Ja még valami: digit-life cikkje alapján (talén már linkeltem) az ATI r3xx es hardver minden belső pixel shader regisztere FP24es. ''

    Ez miért fűzöd mindig hozzá? :)

  • Power

    senior tag

    válasz rudi #53 üzenetére

    ''Savagegamers: ''Lebegopontos számábrázolás esetén a kettedespont helye nem fix, hanem a fixpontosként felírt számban vándorol. Egy ''seeemmmmm'' formátumú lebegopontos szám értéke: (-1)^s*2^(e-bias)*1.m, azaz az ''s'' bit meghatározza az elojelet, az e-vel jelölt exponens ketto valamelyik hatványát adja (a ''bias'' egy fix konstans, a nulla érték helyét jelöli ki, így mind negatív, mind pozitív hatvány elérheto), ami a már említett jobbra/balra tologatás miatt az m-el jelölt mantissza eltolását jelenti (normalizát számokról lévén szó, a mantissza elso bitje mindig 1, így azt nem ábrázoljuk, a maradék pedig törtrészt ad meg).''

    Eszerint és szerény tudásom szerint az fp16 valahol 10ad16 nagyságrendjében van maxban és minimuma 10ad(-15) táján van, finomsága pedig 2ad(-15) szóval nemértem hogyan jön a 3 jegy hacsak nem a ((2ad10)/2)-1 fixpontos 10bitbol.''

    Na erre már tényleg írnom kell!!!
    Ha most hétfon írsz, akkor már késo :)

    Szóval a szám mindegyik részét kettes számrendszerben tárolódik, azaz fp16 esetén(nem része a IEEE Standard for Binary Floating-Point Arithmetic'' ANSI / IEEE Std 754-1985 New York szabványnak, nem véletlenül csak 32 bit és afelettitol határozták meg)
    az exponens 5 bites, azaz az exponens -15...+16 tartomány ölel fel(fizikailag van egy ún. Nullpont amihez hozzáadódik a pozitív/negatív elojeles érték az ábrázolásnál - bias vagy minek írták) . Ebbol következoen a nagyságrend 2^-15 és 2^16 között van.
    Ez tízesszámrendszerben 15 * log(2) ~ 4,5 azaz 10 ^ -4,5 ... 10^+4,8

    Na most ez még nem olyan nagy baj, hisz ez könnyen megoldható programozási oldalról, hogy a nagyságrendbol nem lépünk ki. Gyakorlatilag a nem a nagyságrend miatt szoktak 64/80/128 bites lebegopontos számításokat alkalmazni, hanem a pontosság miatt.(Egy FP64 szám nagyságrendje 10^308-as ami a csak nagyon kevés helyre nem elég).

    A pontosság viszont csak a mantisszából ered s ez független az exponenstől.

    Vegzünk egy egyszerű példát:

    6730

    1101001001010 (2-es számrendszerben)

    Normalitzáljuk: 1,101001001010 * 2^12 - itt 12 számjegy van az vezeto egyes után, viszont nekünk csak 10 bitünk van, így az utolsó két jegy elveszik.

    Tehát 1,1010010010 * 2^12 - ez csak 6728. Hopp már a 3-dik számjegy nem jó! Ha felfelé kerekítünk akkor 6732 az eredmény, így csak a negyedik számjegy nem jó(bár az eltérés a pontosszámtól ugyanakkora), tehát csak 3 számjegyre pontos az ábrázolásunk bármit csinálunk.
    A valóságban azonban még sokkal nagyobb gond van! Ugyanis számolni is szeretnék a számunkkal.

    A szám nagyságrendjétol most tekintsünk el, hogy az tudjuk ábrázolni majd 16 biten(az exponens miatt - ugyanis a szorzat eredménye végtelen lenne).

    Szorozzuk a 6730-at önmagával -> 45292900, majd osszuk el 6730-cal. Az eredmény a 6730

    16 bites lebegopontos számokkal:
    Adott a (6728) * (6728) = ?
    Ez binárisan áll egy mantissza szorzásból, az exponenseknél pedig csak összedás van.
    1,1010010010 * 1,1010010010 = 1,010110010101101000100 * 2^1
    Azonban továbbra is csak 10 jegynek van hely az egyes után, így: 1,0101100101 * 2^25 ami csak 45252608
    Na osszuk el 6728-cal:
    1,0101100101 * 2^25 / 1,1010010010 2^12 = 1,1010010001 * 2^12 (s ez már csak 6724)
    Könnyen belátható minnél több muveletet végzünk annál nagyobb lesz a számolási hiba. Simán nem tartahó a 3 jegy pontosság összetettebb számításoknál.

    Te:''Úgy néz ki hiányosak az ismereteid számábrázolás és ATI számhasználat terén is.''
    Én: ''Ha valamit máshogy tudsz, mint ahogy van, az nem biztos hogy téged igazol.''
    TE: ''Ezt nemértem? ... ''

    Így érthető?

    ''szép-szép...''

    Szép bizony! :)

  • rudi

    nagyúr

    válasz rudi #53 üzenetére

    Előzőben elírtam a legkisebb ábrázolhatót; nem 10ad(-15) környéke hanem a maximum negatív előjellel szóval -10ad(16) nagyságrendje körül.

  • Power

    senior tag

    válasz rudi #50 üzenetére

    ''Hát syomorú amit műveltek mindkét oldalról...''

    Ez tényleg syomorú.

    ''Valahol (2es számrendszer egészek) igaz hogy a 8bites szám 8 számjegyet ábrázol de ebben a DX9 esetben ez NEM áll. Erre lehet FreeM módjára reagálni és lehet másképp: ''

    Dehogynem. Az FP16 se5m10 alakú. Azaz 10 darab 1 bites számjegyet ábrázol ez tizesszámrendszerben pont 3.

    ''Kedves Power!
    Úgy néz ki hiányosak az ismereteid számábrázolás és ATI számhasználat terén is. ''

    Ha valamit máshogy tudsz, mint ahogy van, az nem biztos hogy téged igazol. :)

    ''1. Saját érdekedben nézz rá Tessier www.savagegamers.hu-n található cikkére amiben foglalkozik számábrázolással vagy látogass be valami nyilvános egyetemi előadásra számítógépes architektúrákkal kapcsolatban (Veszprémben Dig Rendszerek és Számgép Arch indul februárban és az első 1-2órán elmondanak mindent ami fontos számábrázolásban - valahol fenn van az előadások anyaga, ha érdekel megkeresem). Másik megoldás hogy megnéyed az IEEE weboldalán a leírásokat az ő hivatalosan szabványban rögyített típusairól.''

    Talán a informatika-i Ph.D. után és az 2 év egyetemi oktatás után nem biztos, hogy én szorulok rá a savegamers-re...bár biztos igazad van. :)
    Hisz nem a nagyhírű Veszprémben, hanem a BME/Berkley egyetemén hallgattam és adtam az előadásokat.

    ''3. ATI TELJES MÉRTÉKBEN Microsoft DitectX 9.0-ra tervezte az r300as chipet MINDENHOL követve annak MINIMÁLIS igényeit, ahogyan ez a digit-life-s cikkből is kijön, szóval általában 24bit maximum. ''

    Rég nem erről van szó. Amúgy ennek az ellenkezőjét senki nem állította.

    ''FreeM: lehetne mellőzni a reakciós politikát végre?! Ez itt a PH! fórumán nem FIDESZ VS MSZP stílus hanem aki tud valamit megosztja a kevésbé tudókkal és EMBERI, CIVILIZÁLT módon!!!''

    Kösz, hogy ilyen címen szólítasz, inkább annyit mondok mint FreeM-nek először tanuljatok-olvasatok s csak utána szóljatok.


  • Power

    senior tag

    válasz rudi #37 üzenetére

    Ilyen alapon akkor ez most is áll.
    Itt ülök 2 GB RAM előtt és olyan programot futattam, aminek a minimum az 1G és azon csak vánszorog(2 hete még nekem is csak vánszorgott az 1G-val).
    Ez pont nem sw előbbrejárását fejezi ki, ha a hw nyújtotta lehetőségeket nem próbálja optimálisan kihasználbi.
    Szvsz nem osztom a véleményt, hogy a win3.1 tájékán a sw járt előbb.

Aktív témák

Hirdetés