ChatGPT a AI pro vývojáře

Re:ChatGPT a AI pro vývojáře
« Odpověď #45 kdy: 09. 05. 2023, 11:00:57 »
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/10100 do 10100 asi nebudou moc časté. Programy, které potřebují pracovat s přesností 10100 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.


RDa

  • *****
  • 2 476
    • Zobrazit profil
    • E-mail
Re:ChatGPT a AI pro vývojáře
« Odpověď #46 kdy: 09. 05. 2023, 12:04:42 »
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.

Spis nastala ta chvile, kdy zas michate jabka s hruskama - zde konkretne PRESNOST a ROZSAH.

Aby jste takove chyby nedelal, je vhodne cisla posuzovat v normalizovanem zapisu (0.neco * 10 na neco).

Pro vase priklady kolem milionu + haliru tedy porad plati pocet desetinnych mist 7 dle me definice a halire jsou nereprezovatelna:

0.100000101 * 10^7
0.100000102 * 10^7

Pouzivani normalnizovaneho zapisu pak ma dalsi vyhodu - k te problematice vejs ohledne posouvani desetinne tecky. Zde se vztahuje omezena velikost exponentu, ktera dokaze reprezentovat omezeny pocet hodnot pro exponent (jez je nativne dvojkovy, ale lze znova odvodit desitkovy zaruceny ekvivalent). Tohle cca urcuje nejmensi a nejvetsi cislo pro dany FP datovy typ, coz je ortogonalni vlastnost k presnosti (ne nadarmo jsou pole pro mantisu a exponent zcela nezavisla).

Je to dobre videt na existenci FP16 - kdy se urcita  presnost a rozsah (z int16) zobchodovala na jinou kombinaci rozsahu (vyssi) a presnosti (nizsi), protoze pro specificke aplikace to bude porad dostacujici a prinosnejsi.

RDa

  • *****
  • 2 476
    • Zobrazit profil
    • E-mail
Re:ChatGPT a AI pro vývojáře
« Odpověď #47 kdy: 09. 05. 2023, 12:13:23 »
Ty floaty nejsou moc dobrý příklad. Tam se nějaký nedeterminismus hledá dost těžko.
Já myslím, že jako PŘÍKLAD PŘÍSTUPU dobré jsou.
Pokud se máte rozhodnout, zda budete zaměstnancům počítat výplaty s float nebo decimal čísly.
S floaty to zvládnete za 5 minut, s tím, že občas někde vyskočí nějaká halířová nepřesnost.
S decimaly to bude vždy přesně dle očekávání, ale počítat se to bude hodinu.

A příště podobný problém, jen nepůjde o peníze, ale o zpracovávání nějakých statistik v reálném čase.
Vyberete si stejně nebo jinak?

Tak sa trocha zamyslime a pouzijeme normalny 64bit integer, s tym ze predstavuje hodnotu vynasobenu 100. Ze to zaokruhluje na 2 desatinne miesta? To decimal tiez, teda za predpokladu ze ma nastavene 2 desatinne miesta. Naviac je to pozadovana vlastnost, ciferspioni nepocitaju na vedeckych kalkulackach ked kontroluju ci vami vystaveny danovy doklad je v poriadku. Co myslite ze sa bude pocitat rychlejsie?

Pokud se jedna o databaze, tak zde je take jedna skryta zrada - zatimco DECIMAL(x,y) urcuje garantovany ukladani dle x/y parametru, je typ INT(z) fixne dany (32bit) a parametr z rika jen doporuceni na formatovani vystupu :-)

Treba financni reporty z Microsoft store nam chodi ve formatu s 18 desetinnymi misty, tak to holt zatim importuji na DECIMAL(30,18), nez bude jasny co tim chteli jako rict.

Re:ChatGPT a AI pro vývojáře
« Odpověď #48 kdy: 09. 05. 2023, 12:15:23 »
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.
V relevantnych zdrojoch sa uvadza ze float umoznuje reprezentovat cisla priblizne. To ze inde sa vacsinou uvadza ako reprezentacia realneho cisla, je velmi zjednodusena interpretacia. Takze floagt su pribliznou reprezentaciou realnych cisel. V danom kontexte je formulacia "priblizne" dolezita a nie je mozne ju vynechat.

Na druhu stranu existuje software ktory dokaze pracovat s pi, odmocninami z 2 alebo 3 a dalsimi iracionalnymi cislami, presne, akurat nepouziva ich ciselnu reprezentaciu ale pozna ich matenatiku a pracuje s nimi formalne

Re:ChatGPT a AI pro vývojáře
« Odpověď #49 kdy: 09. 05. 2023, 12:49:47 »

Pokud se jedna o databaze, tak zde je take jedna skryta zrada - zatimco DECIMAL(x,y) urcuje garantovany ukladani dle x/y parametru, je typ INT(z) fixne dany (32bit) a parametr z rika jen doporuceni na formatovani vystupu :-)
Tak nastastie existuju aj databaze kde si mozete popisat vlastne datovy typy. Napr. postgres. Teda ak by vam nestacil typ money, ktory je interne definovany prave ako 64bit integer. Len sa jeho hodnota deli 100 a tomu je prisposobena aj jeho interna aritmetika. Teda nemusi byt 100, moze to byt 10000 ak mate v locales nastavene indicke rupie, alebo 1000 pre pakistanske rupie...

Co sa tyka decimal, vdaka jeho pomalosti je vhodny akurat na prototypovanie, ak mate moznost definovat vlastne typy a ich internu logiku.

Treba financni reporty z Microsoft store nam chodi ve formatu s 18 desetinnymi misty, tak to holt zatim importuji na DECIMAL(30,18), nez bude jasny co tim chteli jako rict.
Mno, Malejmekej, od nich vela veci funguje divne... Neviem ako to chodi teraz, ale cca v 2010 som robil okolo pokladnicnych systemov. Vtedy nebolo mozne aby sa nejaky financny software neriadil legislativou, nedostali certifikat od danovakov. Siemens sa bol ochotny prisposobit, takze po dlhom vysvetlovani ako to ma fungovat a prikladoch ako to naprogramovat, nakoniec ten certifikat dostali (islo o velkeho zakaznika s prevadzkami po celej europe). Takze ten vas import s 18 desatinnymi miestami by som konzultoval s nejakym uctovnikom ktory dobre rozumie svojej praci. Ak ten financny report je pre vasu internu potrebu tak sa zrejme nic nestane, ale ak na zaklade neho odvadzate dane, tak moze byt problem.


Re:ChatGPT a AI pro vývojáře
« Odpověď #50 kdy: 09. 05. 2023, 13:29:47 »
Spis nastala ta chvile, kdy zas michate jabka s hruskama - zde konkretne PRESNOST a ROZSAH.
Celou dobu se tu bavíme o přesnosti. To, že vy píšete o rozsahu ale používáte termín přesnost, to je váš problém.

Pro vase priklady kolem milionu + haliru tedy porad plati pocet desetinnych mist 7 dle me definice
To, že jste si vymyslel vlastní definici pojmu, který všichni ostatní používají v jiném významu, je váš problém. „Desetinná místa“ v češtině vždy označují místa za desetinnou čárkou.

protoze pro specificke aplikace to bude porad dostacujici a prinosnejsi.
Což je přesně to, co jsem psal – že aplikace pracuje s určitým rozsahem hodnot, málokdy potřebuje umět reprezentovat všechny hodnoty, které umí reprezentovat daný typ. Třeba když je ve zdravotnické dokumentaci uložena hmotnost pacienta v kg, určitě nejsou potřeba záporná čísla, určitě nejsou potřeba čísla přes tisíc, a přesnost bude stačit nejspíš maximálně na dvě desetinná místa.