Office 365
Moderátor: Moderátoři
Keď v orámovanom políčku vypočítanú 6 prepíšem ručne na 6, tak v žltom políčku je to zrazu správne.
Kždopádne, pri numerických výpočtoch, na rozdiel od algebry, je vždy potrebné dbať na správny postup. Pri správnom postupe sa chyby zaokruhľovania eliminujú, pri nesprávnom znásobuju.
https://support.microsoft.com/sk-sk/off ... 653b98f5bc
Teda funkcia CHOOSE() aplikuje na neceločíselný index pred použitím funkciu INT(), nie ROUND().Ak je hodnota argumentu index_číslo zlomok, skráti sa pred použitím na najbližšie nižšie celé číslo.
Pokiaľ musím 6 zaokrúhľovať aby bolo 6, tak excel nevie počítať, a to mu už nikto neodpára. A je mi jedno kde tá chyba vzniká. Pokiaľ v O.S. má si to excel počítať vlastnou rutinou.
Sranda ako sa vždy všetci chopia obhajovania nejakej nájdenej chyby. Prehlásime chybu za vlastnosť a je to v poriadku.
Ja som upozornil iba na jednu chybu. Nieje vylúčené, že ich tam je hromada ďalších. Stačí si pamätať jedno: softvér nieje neomylný, a presný už vôbec nie.
- tomasjedno
- Příspěvky: 6547
- Registrován: 11 říj 2008, 00:00
- Bydliště: ZZ9 Plural Z Alpha
Neuvědomuješ si, že Excel interně nepočítá v desítkové soustavě, ale ve dvojkové. Ne-celá čísla v desítkové soustavě pak často mají ve dvojkové soustavě nekonečný rozvoj za “desetinnou” čárkou. To je případ i tvého 0,56 což si Excel interně uloží jako 0,100011110101110000101000111101011100001001111111111000001111111 a to je těch tvých 0,55999999999994500.PotPalo píše:Tak kde mám chybu?
Prostě je třeba vždycky počítat s tím, že neceločíselné výsledky jsou vždy přibližné. S přesností, která zpravidla postačuje.
- martinkopp
- Příspěvky: 1303
- Registrován: 12 říj 2023, 00:00
0.55999999999994500-0.56=-0.00000000000005500 tedy chyba je až na čtrnáctém místě v porovnání s výsledkem (a o 4 víc v porovnání se vstupními čísly). Hlavní příčinou je zobrazení - ještě 10 míst za očekávaným výsledkem by se zaokrouhlilo ke správné hodnotě (0.560 000 000 000) až na jedenáctém místě by to selhalo (0.559 999 999 999 9). Nezapomeňte ale, že původní číslo bylo 1234,56, chyba vznikla už při jeho převodu do dvojkové soustavy.
Vězte, že tu samou chybu udělá Matlab, asi bych ho měl u Humusoftu reklamovat. Zase je vidět, že když se zobrazení přepne na long tedy na vyšší rozlišení (defaultně je short). A kterýkoliv jiný sw by udělal totéž, pokud by použil k výpočtu typ double a donutil by se k zobrazení tolika moc desetinných míst (vím, že existují i další typy, s plovoucí i pevnou řádovou čárkou s větším rozlišením, ale double je prostě standard).
Kód: Vybrat vše
>> 1234.56-1234
ans =
0.5600
>> format long
>> ans
ans =
0.559999999999945
>>
Tohle je prostě všeobecná vlastnost počítání na počítači, to nezasahuje jen excel, ale veškeré programy. Většinou to neni problém. Ale pokud potřebujete počítat na hodně platných číslic, už je potřeba se nad tím zamýšlet. Asi jako když se normalizovaly čísla pro osmibity, to se řešilo, jestli bude stačit rozlišení cca 1.4 úhlového stupně (360 stupňů (2pi) byl plný rozsah odpovídající 256) a to samé s proudem, napětím, kmitočtem, dělaly se tehdy i nějaké simulace, kam jsem tohle kvantování musel explicitně zahrnovat (simulace jinak počítala s double, na fixed point by se musel dokupovat toolbox, tak se to muselo řešit jinak).
No ale existují číselné typy stavěné na něco takového, třeba financial nebo jak se jmenuje, to jsou 64 bitová čísla, která ale mají desetinou čárku posunutou o 4 místa. Takže jsou to normální fixed point, ale dají se s nima počítat i halíře (až na setiny halíře). Možná jak jsou teď populární ty bitkojny, tak na ně mají taky něco, vzhledem k tomu, že ten se dělí na 6 desetinných míst a prý se může v budoucnu dělit i na víc.