Stránka 2 z 3

Re: Chybné sčítání desetinných čísel v Excelu

Napsal: 04 čer 2020 16:11
od faraon
Co kdybys to zkusil počítat celočíselně? Prostě všechna ta čísla vynásob stovkou -> posuň desetinnou čárku od dvě místa vpravo, a úplně nakonec výsledek tou stovkou zase vydělíš.

A kdybys sem ten soubor hodil, třeba jen konkrétní kus tabulky s odstraněnými ostatními údaji, tak by nám to s hledáním problému dost pomohlo ;-)

OT: Jinak v Excelu je těch bugů celá řada, jeden pochází dokonce až z roku 1979, uchovávají ho tam prý kvůli "zpětné kompatibilitě" :lol:

Re: Chybné sčítání desetinných čísel v Excelu

Napsal: 04 čer 2020 16:45
od ITCrowd
dobrej nápad farao :thumbup:

Re: Chybné sčítání desetinných čísel v Excelu

Napsal: 04 čer 2020 18:02
od Zivan
ITCrowd píše:To těžko.
To by se stejná chyba objevovala třeba v linuchu a ve všech programovacích jazycích.


Myslis treba na webu v Javascriptu? :)
https://js.do/code/449950

Nebo v C/C++? (1 by se nemela vytisknout)
https://www.onlinegdb.com/ByARqcL2I

Re: Chybné sčítání desetinných čísel v Excelu

Napsal: 04 čer 2020 18:16
od ITCrowd
Myslíš, že klikám na každý odkaz???

Re: Chybné sčítání desetinných čísel v Excelu

Napsal: 04 čer 2020 18:26
od Zivan
OK, tak ja to popisu - jednoduchy priklad, zacne se nulou a dokud je vysledek mensi nez jedna, tak se zobrazi a pricte 0,1. Spravne by se tedy melo zobrazit 0-0,9.

Vysledek editoru Javascriptu:
0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999

Vysledek editoru C/C++:
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1

Re: Chybné sčítání desetinných čísel v Excelu

Napsal: 04 čer 2020 19:01
od ITCrowd
java skript na woknech je stejný jako na vbs.
C je ok.
Čili jsi dokázal, že mám pravdu.

Re: Chybné sčítání desetinných čísel v Excelu

Napsal: 04 čer 2020 19:20
od Zivan
C taky neni OK, to by tu 1 nevytisknul. Interne bude mit opet neco jako 0,9999999999 (a proto cyklus projde jeste jednou a vytiskne tu zaokrouhlenou 1), ale na vystup to zaokrouhli na 1

Re: Chybné sčítání desetinných čísel v Excelu

Napsal: 04 čer 2020 21:16
od faraon
Zivan píše:... tak se zobrazi a pricte 0,1. Spravne by se tedy melo zobrazit 0-0,9.

Ne, nemělo. Uvědom si, že počítač počítá ve dvojkové soustavě, a v ní je dělení deseti značně netriviální záležitost, podobně jako bys v té desítkové ručně na papíře dělil třeba sedmnácti.

Na rozdíl od desítkové je totiž binární 1/10 číslo s nekonečným desetinným rozvojem, podobně jako třeba Pí, ale počítač počítá jenom s konečnou přesností. Pročež jsem už od konce osmdesátých let v každé dobré učebnici programování (tehdy v BASICu) četl, že desetinné číslo se v cyklu přičítat nesmí! A ze stejného důvodu se desetinná čísla také nedají porovnávat pomocí =.

Takže takhle to bude nesprávně v Céčku:

Kód: Vybrat vše

    n=0;
    while (n<1)
          {
          n+=.1;
          printf("%.16f\n",n);
          }

A zcela chybný výsledek vypsaný s vyšší přesností:

Kód: Vybrat vše

0.1000000000000000
0.2000000000000000
0.3000000000000000
0.4000000000000000
0.4999999999999999
0.6000000000000000
0.7000000000000000
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999


Zatímco správný způsob by byl:

Kód: Vybrat vše

    n=0;
    while (n<10)
          {
          n+=1;
          printf("%.16f\n",n/10);
          }

S očekávaným výsledkem:

Kód: Vybrat vše

0.1000000000000000
0.2000000000000000
0.3000000000000000
0.4000000000000000
0.5000000000000000
0.6000000000000000
0.7000000000000000
0.8000000000000000
0.9000000000000000
1.0000000000000000


Příčinu zjistíš takhle:

Kód: Vybrat vše

    printf("\n%.17f\n",.1);

:shock: :shock: :shock: :shock: :shock:

Kód: Vybrat vše

0.10000000000000001


Všechny ty výsledky jsou samozřejmě pouze přibližné, protože převodem z dvojkové do desetinné soustavy dochází k dalším odchylkám. Jediný způsob jak se tomu vyhnout je použít jazyk COBOL, určený pro bankovní operace, který počítá desítkově a všechna čísla ukládá v kódu BCD. Ale věř mi že to nechceš, programátoři v COBOLu jsou sice už přes šedesát let placení nejlépe ze všech, ale jsou to krvavě vydřené peníze :lol:

Re: Chybné sčítání desetinných čísel v Excelu

Napsal: 04 čer 2020 21:22
od karlos64
Zkoušel jsi možnost "přesnost výpočtu podle zobrazení"?
Soubor-Možnosti-Upřesnit-Při výpočtech v tomto sešitu-zaškrtnout volbu "Nastavovat přesnost podle zobrazení" (Excel 2016)

Re: Chybné sčítání desetinných čísel v Excelu

Napsal: 05 čer 2020 07:22
od Zivan
faraon:
Fakt si myslis, ze udelam jednoduchy priklad pro ukazku chyby, tak mi musis vysvetlovat, co je na nem spatne? :)

Re: Chybné sčítání desetinných čísel v Excelu

Napsal: 05 čer 2020 14:20
od Funstorm007
Tak jsem vykousnul část tabulky aby bylo vidět jak původní číslo (sloupec C), které se v originále tahá z jiného listu ale vyjde to nastejno, tak přepočet na záporné/kladné (Sloupec D) podle hodnot ve sloupci B. No a výsledek v kontingenčce je vidět vedle...

http://leteckaposta.cz/899457599

Re: Chybné sčítání desetinných čísel v Excelu

Napsal: 05 čer 2020 16:55
od faraon
Nešlo by to třeba přes Uložto? Letecká pošta se se mnou už delší čas nebaví, zřejmě proto že mám zablokované příliš agresivní reklamní servery ;-)
Nebo rovnou tady do SZ, těch dvacet kilobajtů se mi tam snad vejde.