Ja vam tedy odpovim, protoze o matematice vite asi tak velky H jako o jinych tematech, ve kterych tlacite sva moudra.
Vy mi opravu odpovídat nemusíte.
Zadny program neni schopen pracovat s celou mnozinou realnych cisel a nikdy ani nebude moci - protoze je nekonecne velika.
To, že nějaký program pracuje s celou množinou, neznamená, že musí mít uložena všechna čísla z té množiny. Třeba když budete pracovat s bankovními účty v CZK, stačí vám přesnost na dvě desetinná místa a řád biliard. Když budete mít program, který bude pracovat s hmotností, stačí třeba kladné hodnoty od řádu hmotnosti elementárních částic po řádu hmotnosti celého vesmíru. Ale programy, které budou pracovat s čísly v rozsahu 1/10
100 do 10
100 asi nebudou moc časté. Programy, které potřebují pracovat s přesností 10
100 platných číslic také nebudou moc časté.
Tak nam tedy prozradte, co delaji ty vase pocitacove programy? Neco jineho nez minil programator nebo tvurce vypocetniho systemu?
Pochybuji. Pokud neco "nesedi", je to vzdy neporozumeni technickych omezeni, nebo obycejna neznalost.
Počítačové programy mohou ukládat třeba změřené hodnoty (hmotnost, délka, věk apod.). Nebo mohou ukládat nějaký stav – třeba částku na bankovním účtu. Ve všech případech je nějaký očekávaný rozsah hodnot, což jsou hodnoty, které se reálně vyskytují, plus nějaká rezerva.
Podstatné je to, že když si programátor vyzkouší, že pro některé vybrané hodnoty mu aplikace s čísly v plovoucí řádové čárce počítá matematicky správně, neznamená to, že mu bude matematicky správně počítat pro všechna čísla.
Cely svet si mysli opak - jak jsem psal, pocet desetinnych mist zavisi od typu, ne od hodnoty.
Teď nastala ta správná chvíle, kdy byste měl vzít na vědomí informaci, že množina reálných čísel je nekonečná, a zamyslet se nad tím (to bude ten problém), zda dokážete v konečné paměti počítače reprezentovat všechna reálná čísla s přesností na tři desetinná místa.
Ta čísla jsou nazývaná „čísla v pohyblivé/plovoucí řádové čárce“ („floating-point number“) proto, že desetinná čárka není v reprezentaci čísel umístěna napevno (např. že by za ní vždy byla tři platná desetinná místa), ale pohybuje se.
Ty bezne typy maji velice jasne definovany ekvivalent presnosti v desetinnych mistech:
FP16 ... 3
FP32 ... 7
FP64 ... 15
FP128 ... 34
Ne, tyhle hodnoty nejsou přesnost v desetinných místech (tj. místa za desetinnou čárkou), to je rozsah, kolik řádů (zaokrouhleně, v desítkové soustavě) dokáže daný datový typ reprezentovat. Tj. třeba FP32 má v desetinné soustavě 7 platných číslic, a k tomu číslu se 7 platnými číslicemi se pak někam umístí desetinná čárka – může být někde uvnitř těch 7 číslic, nebo někde před nimi, nebo za nimi. Takže FP32 dokáže odlišit čísla 1 000 001 a 1 000 002, nebo čísla 1,000001 a 1,000002 nebo čísla 0,1000001 0,1000002. Ale už nedokáže rozlišit 1 000 001,01 od 1 000 001,02, nebo nerozliší 1,00000101 od 1,00000102. A nedokáže rozlišit 100 000 001 od 100 000 002. Takže kdybyste použil FP32 pro stav bankovního účtu, u lidí, kteří mají na účtě přes milion, by se vám objevovaly nebo ztrácely halíře.
Račte si to vyzkoušet a pak někam zalezte a nepokoušejte se opravovat tvrzení v oblastech, kterým nerozumíte.
vzdy ide o podmnozinu racionalnych cisel
Technicky máte pravdu, ale vždy se uvádí, že čísla v plovoucí řádové čárce jsou reprezentací reálných čísel. Protože reprezentace v omezené paměti počítače samozřejmě nedokáže reprezentovat ani libovolné přirozené číslo, reprezentace nekonečných množin je vždy jen přibližná. Takže jako číslo v plovoucí řádové čárce můžete (přibližně) reprezentovat i třeba pí nebo odmocninu ze dvou, což jsou reálná čísla.