Windows neumí počítat

Petr

Windows neumí počítat
« kdy: 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
« Poslední změna: 12. 08. 2013, 14:52:17 od Petr Krčmář »


Lol Phirae

Re:Windows neumi pocitat :)
« Odpověď #1 kdy: 12. 08. 2013, 14:46:25 »
Neremcej, to je zdokumentovaná featura  ;D ;D ;D

Franta <xkucf03/>

Re:Windows neumi pocitat :)
« Odpověď #2 kdy: 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

whata

Re:Windows neumí počítat
« Odpověď #3 kdy: 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.

Sten

Re:Windows neumí počítat
« Odpověď #4 kdy: 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 nebo Wolfram|Alpha


Petr

Re:Windows neumí počítat
« Odpověď #5 kdy: 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.  :)

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Windows neumí počítat
« Odpověď #6 kdy: 12. 08. 2013, 16:26:00 »
Galculator: -1.7763568394e-15. Takze Widle to maji i presneji.

Lol Phirae

Re:Windows neumí počítat
« Odpověď #7 kdy: 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.  ::)

Radovan .

Re:Windows neumí počítat
« Odpověď #8 kdy: 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=

Rhinox

Re:Windows neumí počítat
« Odpověď #9 kdy: 12. 08. 2013, 17:48:03 »
RealCalc (Android): 0

Ja to rikal, ze android je lepsi nez widle! :-)

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Windows neumí počítat
« Odpověď #10 kdy: 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

DK

Re:Windows neumí počítat
« Odpověď #11 kdy: 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.

Sten

Re:Windows neumí počítat
« Odpověď #12 kdy: 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 ;)

Kolemjdoucí

Re:Windows neumí počítat
« Odpověď #13 kdy: 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)

Sten

Re:Windows neumí počítat
« Odpověď #14 kdy: 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í