- Pfff... Já znám tohle: http://www.visual6502.org/JSSim/index.html Tak ještě jednou. Navrhni vlastní procesor s vlastní instrukční sadou, vytvoř jeho kompletní zapojení z logických hradel, a pak pochopíš to moje parsování parametrů.
- Změna stavu parametru je side effect. Ideálně by všechny měly být const

- Program je seznam deklarací. Nezávisle na jazyku.
- Oddělený překlad izoluje moduly od sebe, chceš-li mezi nimi něco sdílet, máš headery. Linkerů znám víc, třeba s fortranským jsem si pohrál moc hezky. A s příkazem COMMON...
- Je několik přístupů k tomu, jak něco spočítat úplně blbě. Nakresli si graf.
- Stejně jako předchozí bod, protože když srab, vydávající se z matematika, má bobky z nekonečna, tak prostě řekne že něco nejde. Nulou se dá dělit stejně jako spočítat druhou odmocninu záporného čísla!
Programátorský víceboj 1. díl - Máme rádi matematiku
Moderátor: Mods_senior
Re: Programátorský víceboj 1. díl - Máme rádi matematiku
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: Programátorský víceboj 1. díl - Máme rádi matematiku
1. Nemusím navrhovat vlastní procesor, abych pochopil tvé parsování. Nic světoborného to není a zároveň se to ani nehcová tak, jak by mělo.
2. A tohle moudro ti nakecal kdo?
3. Jestli neumíš rozlišovat mezi pojmy deklarativní a procedurální jazyk, tak se nemáme o čem bavit.
4. Bavíme se o C, nemotej sem Fortran. A oddělený překlad ti nepomůže.
5. Zase mimo.
6. A zase mimo. A jenom tak mimochodem, odmocnina ze záporného čísla lze spočítat jen za určitých podmínek.
Proto jsem chtěl, aby ITCrowd řekl podrobnosti, jelikož jsem měl podezření, že lže.
2. A tohle moudro ti nakecal kdo?
3. Jestli neumíš rozlišovat mezi pojmy deklarativní a procedurální jazyk, tak se nemáme o čem bavit.
4. Bavíme se o C, nemotej sem Fortran. A oddělený překlad ti nepomůže.
5. Zase mimo.
6. A zase mimo. A jenom tak mimochodem, odmocnina ze záporného čísla lze spočítat jen za určitých podmínek.
Proto jsem chtěl, aby ITCrowd řekl podrobnosti, jelikož jsem měl podezření, že lže.
- Ltb
- Administrátor
- Příspěvky: 6796
- Registrován: 28 úno 2003 23:53
- Bydliště: Praha západ
- Kontaktovat uživatele:
Re: Programátorský víceboj 1. díl - Máme rádi matematiku
Bylo by určitě strašně fajn udržet diskuzi na snesitelné úrovni, není potřeba se nijak slovně napadat ani o sebe "otírat" či dohadovat se, ten kdo to bude číst, o nic takového nestojí, věřte mi...prosím tedy bez dalšího braní se za slovo a slovíčkaření...jinak budeme muset zasáhnout a jediné, co tím utrpí, bude volná diskuze...
cpp: svými přístupy přes VPN síť a lehce hádavým stylem působíš velmi nedůvěryhodně
Re: Programátorský víceboj 1. díl - Máme rádi matematiku
A někteří je dokonce umí napsatcpp píše:Dobrý programátor musí umět používat knihovny.
Tak ještě pořád čekám na to vzorové řešení, doufám že se ho dočkám. Tohle je moje řešení, odkazující na onu xenofobní nulu z předchozí diskuze.
Tedy pro začátek druhá odmocnina, začneme od toho nejjednoduššího co se dá spočítat:
Kód: Vybrat vše
/* Funkce my_sqrt počítá druhou odmocninu z reálného čísla zadaného parametrem x. Funkce vrací reálné číslo. */
float my_sqrt(float x, int *err)
{
return *err=(x=(e2f(l2f(x)/2)),x==x&&Inf!=x&&-Inf!=x)?0:1,x;
}Kód: Vybrat vše
/* Funkce my_pow počítá n-tou mocninu (zadanou parametrem n, n je celé číslo) reálného čísla zadaného parametrem x. Funkce vrací reálné číslo. */
float my_pow(float x, const int n, int *err)
{
if (x>=0) x=e2f(l2f(x)*n);
else x=((n%2)?-1:1)*e2f(l2f(-x)*n);
*err=(x==x&&Inf!=x&&-Inf!=x)?0:1;
return x;
}Kód: Vybrat vše
/* Funkce my_nth_root počítá n-tou odocninu (zadanou parametrem n, n je celé číslo) reálného čísla zadaného parametrem x. Funkce vrací reálné číslo. */
float my_nth_root(float x, /*static*/ int n, int *err)
{
if (x>=0) x=e2f(l2f(x)/n);
else x=-e2f(l2f(-x)/n);
*err=(x==x&&Inf!=x&&-Inf!=x)?0:1;
return x;
}- Typ float má tak mizernou přesnost, že se hodí leda k počítání domácích úkolů na základní škole. A někdy dvaatřicet bitů ani na to nestačí! Takže maximální přípustnou chybu jsem zcela ignoroval. Pro srovnání, osmibitový ZX BASIC na Sinclairu počítal se čtyřicetibitovými čísly, šestnáctibitový Turbo Pascal od Borlandu s osmačtyřicetibitovými, což přesností oboje postačuje i na vědecké výpočty, s výjimkou astronomických. Jazyk Cobol, určený pro finanční výpočty, dokonce kvůli přesnosti počítá desítkově. Zato float se musí při výpisu vždy zaokrouhlit, aby vyšlo aspoň něco.
- Je nesmysl programovat matematickou knihovnu nebo funkce v ní obsažené, protože to už provedli jiní, trvalo jim to desítky let a udělali to mnohem lépe než bych dokázal já. Také nebudu tvořit další bc nebo dc, ze stejného důvodu jako v předchozí větě. Proto jsem zvolil (pro mne a podle mne) nejjednodušší metodu. Není ideální, není nejrychlejší, není moc přesná, je prostě pro daný účel "good enough" a také funkční.
- Je nesmysl programovat matematickou knihovnu, ale naopak je velmi vhodné vědět jak funguje, a umět něco aspoň vzdáleně podobného udělat sám. Jinak to dopadne tak jak ukazují "moderní trendy", že kódovací opice googlí metodu na porovnání dvou čísel, a tu pak vlepí do svých bastlů, vyžadujících čtyři jádra a osm giga RAM na věc, která se dá udělat třemi instrukcemi. A že by chápaly a uměly napsat aspoň bubblesort nepřipadá v úvahu, to je pro ně sprosté slovo.
- Moje řešení nezná chybné vstupní hodnoty, pouze chybné výsledky, takže chybu hlásí jen v případě že vyšlo Nekonečno nebo Nečíslo. A protože nehodlám implementovat kompletní IEEE 754, dokáží ty funkce spočítat i věci, které podle normy spočítat nejdou. Je-li to problém, musí ho ošetřit programátor který je ve svém programu použije, což se u knihoven třetích stran stává dost běžně.
ABBC3_SPOILER_SHOW
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)

