Fórum Root.cz

Hlavní témata => Windows a jiné systémy => Téma založeno: Petr 12. 08. 2013, 14:30:41

Název: Windows neumí počítat
Přispěvatel: Petr 12. 08. 2013, 14:30:41
Obcas clovek potrebuje neco overit na kalkulacce, no a kdyz firemni pc je na windowsech, tak sahnete po calc.
Onehda sem to udelal a nestacil se divit, (tan45*10)-10=? .. dle microsoftu to 0 neni, dle microsoftu to je 8,7456166731274737622753322863144e-38 ... jen pro upresneni tan45 = 1. Co sem procital fora, tak to je i u jinych operaci, bug uz trva dlouho. Tak opatrne, nespolehejte na calc.  ;D
Název: Re:Windows neumi pocitat :)
Přispěvatel: Lol Phirae 12. 08. 2013, 14:46:25
Neremcej, to je zdokumentovaná featura (http://support.microsoft.com/kb/72540)  ;D ;D ;D
Název: Re:Windows neumi pocitat :)
Přispěvatel: Franta <xkucf03/> 12. 08. 2013, 14:54:31
S tímhle bude má problém víc softwaru. Např. v Octave dostaneš:

octave:1> tand(45)*10
ans = 10.0000
octave:2> (tand(45)*10)-10
ans = -1.7764e-15



BTW: „Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad“ – a že je to znát :-D
Název: Re:Windows neumí počítat
Přispěvatel: whata 12. 08. 2013, 15:06:20
To neni tak uplne bug jako spis presnejsi nepresnost nez co mas treba na kalkulacce.

Sice je kazdemu cloveku jasne, ze tan(45 stupnu)=1, ale pocitadlo to prevede nejdriv na radiany (nasobeni transdentelnanim cislem), potom pouzije obecny algoritmus pro vypocet, kde se to hemzi faktorialama a delenim, pricemz se vse uklada do pouhych 64 bitu (v zavislosti na platforme a nastavene presnosti). V dusledku predchozich kroku vyleze na konci priblizne 10, od ktere se odecte skutecna 10.
Pokud to Linuxova kalkulacka spocita jinak, tak je bud implementovana jinak nez hardwarove (napr. decimalne v software - viz bc -l) nebo ma jinak nastavene zaokrouhlovani. Windos ma spoustu jinych chyb, ale tohle mezi ne nepatri :-)

K tomu odkazu - princip je jeste jednoduseji vysvetlitelny - 12.51 neni presne vyjadritelne ve dvojkove soustave (obecne cokoliv jineho nez soucet (v patricnem rozpeti) celociselnych mocnin dvojky). Takze stejne jako (tupemu) cloveku nevyjde s tuzkou a papirem 4/3-1/3 jako jedna, tak pocitadlu nemusi vyjit 11/10-1/10 jako jedna.
Název: Re:Windows neumí počítat
Přispěvatel: Sten 12. 08. 2013, 15:25:32
Obcas clovek potrebuje neco overit na kalkulacce, no a kdyz firemni pc je na windowsech, tak sahnete po calc.
Onehda sem to udelal a nestacil se divit, (tan45*10)-10=? .. dle microsoftu to 0 neni, dle microsoftu to je 8,7456166731274737622753322863144e-38 ... jen pro upresneni tan45 = 1. Co sem procital fora, tak to je i u jinych operaci, bug uz trva dlouho. Tak opatrne, nespolehejte na calc.  ;D

Jde o bug při operacích v plovoucí řádové čárce. Stejná chyba je v jakémkoliv programu používajícím FPU. Co je však zajímavé, že v KCalc vyjde jiné číslo :-)

KCalc: −1,57009245868e-15
Octave: -1.7764e-15
Firefox: -1.7763568394002505e-15

Doporučuji používat webovou vědeckou kalkulačku (http://web2.0calc.com/) nebo Wolfram|Alpha (http://www.wolframalpha.com)
Název: Re:Windows neumí počítat
Přispěvatel: Petr 12. 08. 2013, 15:26:47
To neni tak uplne bug jako spis presnejsi nepresnost nez co mas treba na kalkulacce.

Sice je kazdemu cloveku jasne, ze tan(45 stupnu)=1, ale pocitadlo to prevede nejdriv na radiany (nasobeni transdentelnanim cislem), potom pouzije obecny algoritmus pro vypocet, kde se to hemzi faktorialama a delenim, pricemz se vse uklada do pouhych 64 bitu (v zavislosti na platforme a nastavene presnosti). V dusledku ...
To co popisujes, je samozrejme jasne, ale pro rypnuti do wokynek, sem to musel postnout.  ;D ... Nicmene, staci, ze tam je e-38, da se rict, nula jak vysita.  :)
Název: Re:Windows neumí počítat
Přispěvatel: JardaP . 12. 08. 2013, 16:26:00
Galculator: -1.7763568394e-15. Takze Widle to maji i presneji.
Název: Re:Windows neumí počítat
Přispěvatel: Lol Phirae 12. 08. 2013, 16:38:34
Ovšem přátelé, největší tragédie je, že moje cca 20 let stará kalkulačka Casio fx-6200G s tím nemá sebemenší problém.  ::)
Název: Re:Windows neumí počítat
Přispěvatel: Radovan . 12. 08. 2013, 17:16:06
Proč tak komplikovaně? Přepni si na jednoduchou kalkulačku a spočítej 1+2x3=, potom totéž proveď v režimu vědecké...
Podobně zajímavé výsledky dávají některé kalkulačky při tomhle: 1/7=x7=
Název: Re:Windows neumí počítat
Přispěvatel: Rhinox 12. 08. 2013, 17:48:03
RealCalc (Android): 0

Ja to rikal, ze android je lepsi nez widle! :-)
Název: Re:Windows neumí počítat
Přispěvatel: JardaP . 12. 08. 2013, 18:07:13
Ovšem přátelé, největší tragédie je, že moje cca 20 let stará kalkulačka Casio fx-6200G s tím nemá sebemenší problém.  ::)

Podeziral bych, ze inteligentne navrzena kalkulacka bude v sobe mit nejakou tabulku s vysledky pro hodnoty funkci, u kterych muze typicky vzniknout chyba, napriklad tangens 45=1 a ne 1-1.11022302463e-16
Název: Re:Windows neumí počítat
Přispěvatel: DK 12. 08. 2013, 18:13:58
Moje 30 let stara Casio fx-3600P to spocita spravne. Prepnu se do DEG modu a TAN(45)=1. Za tech 30 let jsem akorat do ni musel 2x koupit baterii. Dokonce ma i 38 programovatelnych kroku a umi pocitat numericky integraly.
Název: Re:Windows neumí počítat
Přispěvatel: Sten 12. 08. 2013, 19:06:43
Moje 30 let stara Casio fx-3600P to spocita spravne. Prepnu se do DEG modu a TAN(45)=1. Za tech 30 let jsem akorat do ni musel 2x koupit baterii. Dokonce ma i 38 programovatelnych kroku a umi pocitat numericky integraly.

tan(45) = 1 mi spočítá všechno, co jsem tu jmenoval. tan(45) - 1 = 0 je ale něco jiného ;)
Název: Re:Windows neumí počítat
Přispěvatel: Kolemjdoucí 12. 08. 2013, 19:10:41
8,7456166731274737622753322863144e-38 ... jen pro upresneni tan45 = 1

To není bug, ale feature strojového počítání. Podobné číslo vyjde na každém výpočetním stroji, který uchovává mezivýsledky v plovoucí řádové čárce. Rozdíl je jenom v tom, jak moc se na konci zaokrouhluje.

Prepnu se do DEG modu a TAN(45)=1.

TAN(45) vyjde 1 i v calc.exe
Musíš vyhodnotit celý výraz (TAN(45)*10)-10 ne jenom TAN(45)
Název: Re:Windows neumí počítat
Přispěvatel: Sten 12. 08. 2013, 19:11:16
Proč tak komplikovaně? Přepni si na jednoduchou kalkulačku a spočítej 1+2x3=, potom totéž proveď v režimu vědecké...
Podobně zajímavé výsledky dávají některé kalkulačky při tomhle: 1/7=x7=

KCalc:
1+2×3 = 7
1/7= ×7= (pro ověření chybného zaokrouhlení:) -1 = 0

Octave:
1+2×3 = 7
1/7= ×7= -1 = 0

Firefox:
1+2×3 = 7
1/7= ×7= -1 = 0

Takže tak snadné to fakt není
Název: Re:Windows neumí počítat
Přispěvatel: Lol Phirae 12. 08. 2013, 19:13:12
TAN(45) vyjde 1 i v calc.exe
Musíš vyhodnotit celý výraz (TAN(45)*10)-10 ne jenom TAN(45)

Výraz jsem vyhodnotil celý... 20 let stará kalkulačka stále vede.  ::)
Název: Re:Windows neumí počítat
Přispěvatel: Jirka1 12. 08. 2013, 20:11:08
Proč tak komplikovaně? Přepni si na jednoduchou kalkulačku a spočítej 1+2x3=, potom totéž proveď v režimu vědecké...
Podobně zajímavé výsledky dávají některé kalkulačky při tomhle: 1/7=x7=
Jednoduchá kalkulačka emuluje stupidní kalkulačky, které se stále prodávají. Ty neznají priority a běžně počítají asi na stejný počet míst, jako zobrazují na displeji. Také při operaci 99999999+1 nepřejdou do exponenciálního vyjádření čísla, ale výpočet označí za chybu.
Název: Re:Windows neumí počítat
Přispěvatel: paya 12. 08. 2013, 20:44:56
http://en.wikipedia.org/wiki/Loss_of_significance
Název: Re:Windows neumí počítat
Přispěvatel: Ziktofel 12. 08. 2013, 22:56:10
gnome-calculator 3.8.1 a vysledek 0  ;)