Proč je desetinné číslo defaultně double?

kuka

Re:Proč je desetinné číslo defaultně double?
« Odpověď #15 kdy: 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.


Jakub Galgonek

Re:Proč je desetinné číslo defaultně double?
« Odpověď #16 kdy: 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ý.

prezek

  • ***
  • 229
    • Zobrazit profil
Re:Proč je desetinné číslo defaultně double?
« Odpověď #17 kdy: 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.

v

Re:Proč je desetinné číslo defaultně double?
« Odpověď #18 kdy: 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

JS

Re:Proč je desetinné číslo defaultně double?
« Odpověď #19 kdy: 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.


JSH

Re:Proč je desetinné číslo defaultně double?
« Odpověď #20 kdy: 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.

Jakub Galgonek

Re:Proč je desetinné číslo defaultně double?
« Odpověď #21 kdy: 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.

kuka

Re:Proč je desetinné číslo defaultně double?
« Odpověď #22 kdy: 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.

Pavel...

Re:Proč je desetinné číslo defaultně double?
« Odpověď #23 kdy: 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

:)

Jakub Galgonek

Re:Proč je desetinné číslo defaultně double?
« Odpověď #24 kdy: 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ý.

j

Re:Proč je desetinné číslo defaultně double?
« Odpověď #25 kdy: 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.

Inkvizitor

Re:Proč je desetinné číslo defaultně double?
« Odpověď #26 kdy: 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.

gamer

Re:Proč je desetinné číslo defaultně double?
« Odpověď #27 kdy: 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

JS

Re:Proč je desetinné číslo defaultně double?
« Odpověď #28 kdy: 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).

Randolf

Re:Proč je desetinné číslo defaultně double?
« Odpověď #29 kdy: 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.