Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Michal Štrba 02. 03. 2014, 15:52:40

Název: Proč je desetinné číslo defaultně double?
Přispěvatel: Michal Štrba 02. 03. 2014, 15:52:40
Len sa divim. V asi skoro vsetkych jazykoch je obycajne desatinne cislo (literal) typu double. Tzn. ze nemozem napisat toto:

float x = 2.45;

Namiesto toho musim explicitne urcit, ze sa jedna o float:

float x = 2.45f;

Preco je to tak? Som si absolutne isty, ze pre drvivu vacsinu pripadov 32-bitovy float uplne staci. Dostali ste sa uz vobec do situacie, ked vam 32-bitov nestacilo? Ja este nie. Preto by som povazoval za rozumne, aby desatinne cislo bolo defaultne 32-bitovy float. Ved aj literal celeho cisla je defaultne int a nie long. Co si o tom myslite vy?
Název: Re:Preco je desatinne cislo defaultne double?
Přispěvatel: Jakub Galgonek 02. 03. 2014, 16:28:46
Preco je to tak? Som si absolutne isty, ze pre drvivu vacsinu pripadov 32-bitovy float uplne staci. Dostali ste sa uz vobec do situacie, ked vam 32-bitov nestacilo? Ja este nie.

O jakém jazyce je řeč? Třeba norma C++ neříká nic o tom, že float je 32 bitový. Vlastně se ten typ ani nemusí držet IEEE 754.

Co se týče praxe, jo setkal jsem se s případy, kdy 32-bitový float nestačil. Ono stačí chvíli v tom floatu něco počítat a za chvíli začnou vycházet blbosti.
Název: Re:Preco je desatinne cislo defaultne double?
Přispěvatel: Michal Štrba 02. 03. 2014, 16:38:56
Co se týče praxe, jo setkal jsem se s případy, kdy 32-bitový float nestačil. Ono stačí chvíli v tom floatu něco počítat a za chvíli začnou vycházet blbosti.

Ono samozrejme sa mozu vyskytnut aj situacie, ked 32-bitov nestaci, ja nehovorim, ze 64-bitovy by nemal existovat. Len to hovorim, ze by nemal byt defaultny, pretoze naozaj, vacsinou staci tych 32-bitov.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: vyvojar 02. 03. 2014, 16:44:28
Právě že bych spíš řekl, že ve většině případů, kde už použiješ ten float, potřebuješ co největší přesnost.
Název: Re:Preco je desatinne cislo defaultne double?
Přispěvatel: Tomaskom 02. 03. 2014, 16:47:11
Som si absolutne isty, ze pre drvivu vacsinu pripadov 32-bitovy float uplne staci. Dostali ste sa uz vobec do situacie, ked vam 32-bitov nestacilo? Ja este nie.

Ja se naopak nedostal do situace, kdy bych musel setrit pameti na takove urovni, abych musel sahnout k floatu. Kdyz programuju fyzikalni simulace, vzdy prakticky bez premysleni beru double (mensi chyby zaokrouhlovani).

Co se rychlosti tyce je to slozitejsi, zalezi silne na HW... pokud HW umi pocitat doubly a floaty jsou pri vypoctu prevadeny na doubly, tak muze byt double i rychlejsi. Proto dokud me netlaci pamet, tohle vubec neresim.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: DK 02. 03. 2014, 16:58:51
a Jave je treba defaultne celociselny literal typu long
Název: Re:Preco je desatinne cislo defaultne double?
Přispěvatel: Jakub Galgonek 02. 03. 2014, 17:00:03
Len to hovorim, ze by nemal byt defaultny, pretoze naozaj, vacsinou staci tych 32-bitov.

Které případy tvoří tu většinu? Když to vezmeš kolem a kolem, tak ve většině případů asi ten float vlastně ani nepotřebuješ - však až do 486 ani x86 procesory FPU neměly.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: Jakub Galgonek 02. 03. 2014, 17:02:25
a Jave je treba defaultne celociselny literal typu long

Není, v Javě je to defaultně také int.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: DK 02. 03. 2014, 17:05:20
a Jave je treba defaultne celociselny literal typu long

Není, v Javě je to defaultně také int.
nojo, fakt, omlouvam se za dezinformaci
Název: Re:Preco je desatinne cislo defaultne double?
Přispěvatel: Michal Štrba 02. 03. 2014, 18:19:29
Ja se naopak nedostal do situace, kdy bych musel setrit pameti na takove urovni, abych musel sahnout k floatu. Kdyz programuju fyzikalni simulace, vzdy prakticky bez premysleni beru double (mensi chyby zaokrouhlovani).

Co sa tyka fyzikalnych simulacii, tak trebars fyzikalna kniznica Box2D pouziva 32-bitovy float (a naozaj explicitne 32-bitovy). A v ziadnom pripade sa neda hovorit, ze by bola nepresna, prave naopak.
Název: Re:Preco je desatinne cislo defaultne double?
Přispěvatel: JS 02. 03. 2014, 18:35:08
Co sa tyka fyzikalnych simulacii, tak trebars fyzikalna kniznica Box2D pouziva 32-bitovy float (a naozaj explicitne 32-bitovy). A v ziadnom pripade sa neda hovorit, ze by bola nepresna, prave naopak.

Box2D neni fyzikalni simulace, to je herni engine.. :) Nas na FJFI (numericka matematika) ucili, ze pouzivat obycejny 32-bitovy float je spatny napad.
Název: Re:Preco je desatinne cislo defaultne double?
Přispěvatel: JSH 03. 03. 2014, 10:29:43
Co sa tyka fyzikalnych simulacii, tak trebars fyzikalna kniznica Box2D pouziva 32-bitovy float (a naozaj explicitne 32-bitovy). A v ziadnom pripade sa neda hovorit, ze by bola nepresna, prave naopak.
Pro "fyzikální simulaci" krabic na obrazovce je i ten float skoro overkill. Ještě štěstí, že v C++ nemáme half, jinak by ho mohl někdo pro JEHO drtivou většinu případů taky vyžadovat jako default.
Jo a mluvit u simulátoru krabic o přesnosti už zavání špatným vtipem. Pixel sem, pixel tam, ono se to vsákne. Jak se to hýbe trochu rychleji tak stejně nikdo nic nepozná, pokud se tam někde nehromadí energie.
Název: Re:Preco je desatinne cislo defaultne double?
Přispěvatel: Tomaskom 03. 03. 2014, 12:19:23
Ja se naopak nedostal do situace, kdy bych musel setrit pameti na takove urovni, abych musel sahnout k floatu. Kdyz programuju fyzikalni simulace, vzdy prakticky bez premysleni beru double (mensi chyby zaokrouhlovani).

Co sa tyka fyzikalnych simulacii, tak trebars fyzikalna kniznica Box2D pouziva 32-bitovy float (a naozaj explicitne 32-bitovy). A v ziadnom pripade sa neda hovorit, ze by bola nepresna, prave naopak.

Delal sem transport nabitych castic v urychlovaci (pruchod magnetovymi soustavami). Na vzdalenosti ~240m dosahuji po mnoha operacich pricne presnosti okolo 0.1μm (ktera je dana spise pouzitou simulacni metodou) a pravdepodobne pujde jit jeste niz. Tady by 32bit floaty docela vadily... ::)

Jak jsem psal, dokud neni problem s pameti, nema vetsinou smysl o floatu uvazovat.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: Randolf 03. 03. 2014, 13:06:27
Ja to vidim jednoduse - mit double jako default je bezpecnejsi reseni pro takove to programovani pro sebe.

Dle meho nazoru existuje mnoho programatoru - laiku, kteri do reprezentace promenne bud nevidi, nebo se nad tim proste nezamysli (napriklad uz jen to, ze u floatu je diskretizacni krok nekonstantni, mate spoustu lidi: ma float, podiva se jak presne reprezentuje cislo kolem nuly, rekne si, ze to staci. A chyba lavky!)

Ja vim, ze je to na prvni pohled jasne, ale plynou z toho dalsi komplikace - napriklad nerovnomerne rozlozeni diskretizacniho sumu zpusobi, ze u mnoha statistickych estimatoru, jako je treba (zakladni) kalmanuv filter, nejsou splneny zakladni podminky, nebot sum soustavy se predpoklada "zero-mean gaussian"). Pouzitim double se tyto problemy casto neprojevi (diskretizacni sum je casto zanedbatelny) a tak to proste funguje. Casto se potom pri prakticke implementaci prejde na single a jeje - ono to nefunguje - proc?

Otazka je, co je lepsi - vyresit problem konceptu pri uvodnim navrhu, nebo pri implementaci? Za mne by toto mely resit coding standards daneho tymu. Co Ti brani explicitne deklarovat single nebo double, jeste lepe pak neco jako float32_t a float64_t? Pokud se o to nezajimas, neni lepsi Ti defaultne poskytnout reseni, s nimz prichazi mene problemu?
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: Kolemjdoucí 03. 03. 2014, 16:28:13
Preco je to tak? Som si absolutne isty, ze pre drvivu vacsinu pripadov 32-bitovy float uplne staci. Dostali ste sa uz vobec do situacie, ked vam 32-bitov nestacilo? Ja este nie.

Jsem si absolutně jistý že nemáte ani tušení jak reálné čísla v počítačích fungují, stejně tak jako 99 % lidí fušujících do programování, jinak byste moc dobře věděl o tomhle:

int x = 0x1000001;
float y = (float) x;
int z = (int) y;
if (z == x) printf("All OK"); else printf("Catastrophic problem occured");

Když to vezmeš kolem a kolem, tak ve většině případů asi ten float vlastně ani nepotřebuješ - však až do 486 ani x86 procesory FPU neměly.

FPU v procesorech nebyly, ale na motherboardech bývaly patice pro FPU externí a kdo si tedy připlatil měl už v době 8086 tři různé 32,64,80 bitové formáty s hardwarovou podporou.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: kuka 03. 03. 2014, 17:15:39
Chtel bych mit tvoje starosti. Ja jsem se jeste nedostal do situace, ze bych potreboval traktor. Je to a) tim, ze oktavka bahate staci na vsechno, nebo b) nepracuju v lese nebo v zemedelstvi. Pro vetsinu vedeckych vypoctu (ke kterym jsou cisla v plovouci carce primarne urcena), 32bitu tezce nestaci.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: Jakub Galgonek 03. 03. 2014, 23:42:49
Když to vezmeš kolem a kolem, tak ve většině případů asi ten float vlastně ani nepotřebuješ - však až do 486 ani x86 procesory FPU neměly.

FPU v procesorech nebyly, ale na motherboardech bývaly patice pro FPU externí a kdo si tedy připlatil měl už v době 8086 tři různé 32,64,80 bitové formáty s hardwarovou podporou.

O koprocesorech samozřejmě vím :). Chtěl jsem tím jen říct, že se FPU nepovažovalo za něco, co by využil každý.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: prezek 04. 03. 2014, 00:10:24
Chtel bych mit tvoje starosti. Ja jsem se jeste nedostal do situace, ze bych potreboval traktor. Je to a) tim, ze oktavka bahate staci na vsechno, nebo b) nepracuju v lese nebo v zemedelstvi. Pro vetsinu vedeckych vypoctu (ke kterym jsou cisla v plovouci carce primarne urcena), 32bitu tezce nestaci.
A už sis někdy kupoval auto? A nabízeli ti defaultně traktor? Dotazovateli nejspíš nevadí existence double (traktoru), jen ho zajímalo, proč musí výslovně říct, že ho nechce.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: v 04. 03. 2014, 08:55:19
co nějaký příklad pro ilustraci?

výpočet s použitím float:
100000 / 3 = 33333.332031
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: JS 04. 03. 2014, 09:21:52
Mimochodem, kdyz uz se tu resi presnosti cisel - nekdy je to prekvapive. Nedavno jsem sledoval prednasku o Google Translate od Norviga a ten uvadel, ze na ulozeni pravdepodobnosti slov v praxi neni potreba 32, 16 nebo 8 bitu, ale staci pouhe 4! Takze opravdu hodne zalezi na aplikaci, kterou mate.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: JSH 04. 03. 2014, 10:36:53
A už sis někdy kupoval auto? A nabízeli ti defaultně traktor? Dotazovateli nejspíš nevadí existence double (traktoru), jen ho zajímalo, proč musí výslovně říct, že ho nechce.
Auto a traktor není dobré přirovnání. U floatu a doublu není tak jisté, který se používá častěji. Řekl bych že v dobách vzniku C to byl double. Dnes to tak jisté asi není, ale C kvůli tomu nikdo měnit nebude.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: Jakub Galgonek 04. 03. 2014, 10:57:23
Ved aj literal celeho cisla je defaultne int a nie long.

Je tu jeden zásadní rozdíl. Když máte výpočet s proměnnou typu long a s literálem celého čísla (které jsou typu int), tak se literál automaticky přetypuje na long a vše je v pohodě. U desetinných čísel to tak ale není. Například hodnota 0.1f je jiná než 0.1, protože 0.1 nemá ve dvojkové soustavě konečný rozvoj. Kdyby byl literál defaultně float, vedlo by to k velkému množstí skrytých chyb, protože (double) 0.1f je prostě něco jiného než 0.1.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: kuka 04. 03. 2014, 11:36:30
A už sis někdy kupoval auto? A nabízeli ti defaultně traktor? Dotazovateli nejspíš nevadí existence double (traktoru), jen ho zajímalo, proč musí výslovně říct, že ho nechce.
Auto a traktor není dobré přirovnání. U floatu a doublu není tak jisté, který se používá častěji. Řekl bych že v dobách vzniku C to byl double. Dnes to tak jisté asi není, ale C kvůli tomu nikdo měnit nebude.

No ja myslim, ze to je dobre prirovnani, protoze upozornuje na to, ze existuji take jine cinnosti a potreby, nez ma tazatel. 32 bitu ma v plovouci carce strasne malou presnost a pro vetsinu pouziti je zcela nevyhovujici (statistika, numericke metody, fyzikalni simulace...). I 64 bitu je casto malo, viz napr. problemy s pokrocilejsimi statistickymi metodami v excelu apod. Vztah zde neni analogicky int-long (do int se vetsina "poctu neceho" bohate vejde), ale spis int-short (ve specialnich pripadech vim, ze mi mensi staci). Nechapu, proc by dnes mely obecne stacit vypocty v mensi presnosti, nez v "dobach vzniku C", intutivne bych cekal, ze to bude spise naopak.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: Pavel... 04. 03. 2014, 11:46:05
automaticky přetypuje na long a vše je v pohodě

stastna to dusa ktora nestretla Visual Basic :P

Dim x As Integer
x = 2 ^ 14
MsgBox x * 2 ......  Overflow

:)
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: Jakub Galgonek 04. 03. 2014, 12:09:16
stastna to dusa ktora nestretla Visual Basic :P

Dim x As Integer
x = 2 ^ 14
MsgBox x * 2 ......  Overflow

Tak tohle se ti stane i v C/C++, pokud je int 16-bitový.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: j 04. 03. 2014, 12:50:14
Pokud jsou me informace spravne ... tak pro skutecne vedecke vypocty, se stejne desetinne formaty vubec nepouzivaji. Prave proto, ze se takovy format muze (a taky chova) ruzne na ruznych platformach a je to zavisle obcas i na kompilatoru/interpretru.

A jak ze se to dela? No jednoduse se pouzivaji celkem jednoznacne se chovajici formaty celociselne, ... s tim, ze se vi ... ze vysledek je v nejakych desetinach ... trebas 200mist za nulou. A samo, neni problem takto pocitat s defakto "neomezenym" rozsahem.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: Inkvizitor 04. 03. 2014, 14:43:29
Hlavne existuji jazyky, ktere umoznuji zadavat a ukladat racionalni cisla (tj. zlomky) a provadet nad nimi operace, jejichz vysledkem je dalsi racionalni cislo. Odpoved tedy zni: krome specialnich aplikaci, kde je dulezity vykon a ne presnost, je pouzivani typu float a double v zasade vzdycky spatne. A pokud si nekdo pro svuj program zvoli vyssi assembler typu C, nemuze se divit.  :D

Pokud jsou me informace spravne ... tak pro skutecne vedecke vypocty, se stejne desetinne formaty vubec nepouzivaji. Prave proto, ze se takovy format muze (a taky chova) ruzne na ruznych platformach a je to zavisle obcas i na kompilatoru/interpretru.

A jak ze se to dela? No jednoduse se pouzivaji celkem jednoznacne se chovajici formaty celociselne, ... s tim, ze se vi ... ze vysledek je v nejakych desetinach ... trebas 200mist za nulou. A samo, neni problem takto pocitat s defakto "neomezenym" rozsahem.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: gamer 04. 03. 2014, 14:56:32
Pokud jsou me informace spravne ... tak pro skutecne vedecke vypocty, se stejne desetinne formaty vubec nepouzivaji. Prave proto, ze se takovy format muze (a taky chova) ruzne na ruznych platformach a je to zavisle obcas i na kompilatoru/interpretru.
Není to závislé na platformě, pro výpočty v pohyblivé řádové čárce existuje standard:
http://en.wikipedia.org/wiki/IEEE_floating_point

A jak ze se to dela? No jednoduse se pouzivaji celkem jednoznacne se chovajici formaty celociselne, ... s tim, ze se vi ... ze vysledek je v nejakych desetinach ... trebas 200mist za nulou. A samo, neni problem takto pocitat s defakto "neomezenym" rozsahem.
Což je ukrutně pomalé, takže prakticky nepoužitelné a vědci stejně počítají v double:
http://root.cern.ch/drupal/content/about
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: JS 04. 03. 2014, 15:18:14
Pokud jsou me informace spravne ... tak pro skutecne vedecke vypocty, se stejne desetinne formaty vubec nepouzivaji. Prave proto, ze se takovy format muze (a taky chova) ruzne na ruznych platformach a je to zavisle obcas i na kompilatoru/interpretru.
Není to závislé na platformě, pro výpočty v pohyblivé řádové čárce existuje standard:
http://en.wikipedia.org/wiki/IEEE_floating_point

Ja bych k tomu jenom doplnil, ze posledni standard podporuje i floating point v desitkove soustave, takze treba 0.1 ma pak konecny rozvoj. Tohle se hodi treba pro financni aplikace. A na z10 mainframu, ktery to hardwarove implementuje, je to pak podstatne rychlejsi nez klasicke operace s fixed point desitkovymi cisly (ktera ten HW podporuje uz od S/360), jak tady (dost nesmyslne) navrhoval j.

Jinak, i kdyz s Inkvizitorem vetsinou souhlasim, tady docela dost ne - racionalni cisla jsou fajn, bohuzel aplikaci, ktere by se s tim mohly spokojit, je dost malo. Temer v kazdem realnem vypoctu jsou potreba odmocniny a goniometricke funkce. Navic jelikoz je to obvykle implementovano v SW, bude to fakt pomale.

Zkratka, floating point je dobry vynalez, a nelze ho trivialne nahradit pomoci vypoctu s pevnou carkou (tedy integery).
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: Randolf 04. 03. 2014, 15:41:12
Pokud jsou me informace spravne ... tak pro skutecne vedecke vypocty, se stejne desetinne formaty vubec nepouzivaji. Prave proto, ze se takovy format muze (a taky chova) ruzne na ruznych platformach a je to zavisle obcas i na kompilatoru/interpretru.
Není to závislé na platformě, pro výpočty v pohyblivé řádové čárce existuje standard:
http://en.wikipedia.org/wiki/IEEE_floating_point

Ja bych k tomu jenom doplnil, ze posledni standard podporuje i floating point v desitkove soustave, takze treba 0.1 ma pak konecny rozvoj. Tohle se hodi treba pro financni aplikace. A na z10 mainframu, ktery to hardwarove implementuje, je to pak podstatne rychlejsi nez klasicke operace s fixed point desitkovymi cisly (ktera ten HW podporuje uz od S/360), jak tady (dost nesmyslne) navrhoval j.

Jinak, i kdyz s Inkvizitorem vetsinou souhlasim, tady docela dost ne - racionalni cisla jsou fajn, bohuzel aplikaci, ktere by se s tim mohly spokojit, je dost malo. Temer v kazdem realnem vypoctu jsou potreba odmocniny a goniometricke funkce. Navic jelikoz je to obvykle implementovano v SW, bude to fakt pomale.

Zkratka, floating point je dobry vynalez, a nelze ho trivialne nahradit pomoci vypoctu s pevnou carkou (tedy integery).

re: Rational nebo Fractional type: Nene, naopak, nektera dobra DSP to maji primo v instrukcni sade, naopak jsou jednoduche na rychlou implementaci v kremiku.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: student 04. 03. 2014, 15:54:00
Tohle se hodi treba pro financni aplikace.
Bodaj by tak ludia programovali aspon v bankach...

Pri robeni jedneho eshopu sme sa divili, ze pri posielani ciastky obsahujucej jednotky halierov sa odosiela a aj nam chodi niekedy o halier menej. Logy ukazovali spravne ciastky poslane do API. Nakoniec sme sa od banky dozvedeli, ze ide o technicky problem a ze mame zatial platbu akceptovat aj tak.

Zkratka, floating point je dobry vynalez, a nelze ho trivialne nahradit pomoci vypoctu s pevnou carkou (tedy integery).
Je to dobry vynalez a na vela veci sa hodi, ale bohuzial je niekedy vyuzivany viac, ako je treba. Typicky niekto neschopny vidi desatinnu ciarku a pise double alebo float.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: gamer 04. 03. 2014, 16:03:23
re: Rational nebo Fractional type: Nene, naopak, nektera dobra DSP to maji primo v instrukcni sade, naopak jsou jednoduche na rychlou implementaci v kremiku.
Fractional aritmetika v DSP nemá s racionálními čísly nic společného. Fractional čísla v DSP jsou v podstatě floating point čísla bez exponentu v rozsahu -1.0 až skoro 1.0
http://en.wikipedia.org/wiki/Fixed-point_arithmetic
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: David 04. 03. 2014, 17:37:22
Btw...
použití float vs. double neznamená nutně nižší přesnost výpočtů. Pokud běží výpočty na FPU, tak tato pracuje v 80 bitech. Tj. k ořezání/snížení přenosti dojde pouze pokud se uloží data z FPU registru zpět do paměti (vlastní výpočet může celý proběhnout v 80 bitech). Velmi záleží na optimalizacích a povaze řešené úlohy.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: Kolemjdoucí 04. 03. 2014, 17:56:22
Btw...
použití float vs. double neznamená nutně nižší přesnost výpočtů. Pokud běží výpočty na FPU, tak tato pracuje v 80 bitech. Tj. k ořezání/snížení přenosti dojde pouze pokud se uloží data z FPU registru zpět do paměti (vlastní výpočet může celý proběhnout v 80 bitech). Velmi záleží na optimalizacích a povaze řešené úlohy.

Pokud běží výpočty na FPU, tak záleží na libovůli programátora zda FPU pracuje v režimu 24 nebo 53 nebo 64 bitů, týká se zejména nejčastěji využívaných operací + - * /.

Strana 189
http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: ded.kenedy 04. 03. 2014, 19:56:13
Citace
Pokud běží výpočty na FPU,

Vetsinou nebezi, ... dnes je vetsina vypoctu s plovouci radku pocitana pres SSEx, na 64bitovych intelech je to oficialne preferovane reseni a prekladace se podle toho chovaji.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: Inkvizitor 05. 03. 2014, 08:25:09
Uznavam, ze jsem ponekud nadsadil. Samozrejme, ze racionalni cisla nejsou pouzitelna vsude. Spis jsem mohl rici, ze pokud nekdo pouziva floaty, mel by vedet, k cemu to muze vest, ale to by nebylo dostatecne uderne.  ;)

Jinak, i kdyz s Inkvizitorem vetsinou souhlasim, tady docela dost ne - racionalni cisla jsou fajn, bohuzel aplikaci, ktere by se s tim mohly spokojit, je dost malo. Temer v kazdem realnem vypoctu jsou potreba odmocniny a goniometricke funkce. Navic jelikoz je to obvykle implementovano v SW, bude to fakt pomale.

Zkratka, floating point je dobry vynalez, a nelze ho trivialne nahradit pomoci vypoctu s pevnou carkou (tedy integery).
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: Kolemjdoucí 05. 03. 2014, 08:58:42
dnes je vetsina vypoctu s plovouci radku pocitana pres SSEx

SSE pro float a double podporuje jenom asi pět základních operací jako + - * /, zbytek jako sin, tg a podobně je stále přes FPU.
Dále SSE umí přesnost jenom 53 a 24 bitů, žádná verze SSE neumí rozšířenou přesnost 64 bitů.
Název: Re:Proč je desetinné číslo defaultně double?
Přispěvatel: ded.kenedy 05. 03. 2014, 17:57:22
@Kolemjdoucí: A co jsi tim chtel rict?

Citace
SSE pro float a double podporuje jenom asi pět základních operací jako + - * /

Tech operaci je vic, treba i SQRT. Navic processor ma k dispozici 15 (a vic) 128bitovych (a vetsich registru), coz prekladace s radosti vyuzivaji, vic nez staricke FPU. Ony goniometricke funkce nejsou zase tak casto pouzivane.

Citace
Dále SSE umí přesnost jenom 53 a 24 bitů, žádná verze SSE neumí rozšířenou přesnost 64 bitů.

A koho to trapi? Vetsina programovacich jazyku to stejne nedokaze vyuzit.