Chybné sčítání desetinných čísel v Excelu Vyřešeno

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7039
Registrován: prosinec 10
Pohlaví: Muž

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

Příspěvekod faraon » 04 čer 2020 16:11

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:


"Dokud nebyly počítače, programování nebylo problémem.
Jestliže bylo několik slabých počítačů, bylo programování malým problémem.
Když však programátoři získali počítače na svou dobu ohromné síly, stalo se také programování ohromným problémem."

E. W. Dijkstra, 1972

Reklama
Uživatelský avatar
ITCrowd
Tvůrce článků
Elite Level 12.5
Elite Level 12.5
Příspěvky: 19759
Registrován: březen 10
Pohlaví: Muž

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

Příspěvekod ITCrowd » 04 čer 2020 16:45

dobrej nápad farao :thumbup:
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

Zivan
Level 4.5
Level 4.5
Příspěvky: 1605
Registrován: leden 10
Pohlaví: Nespecifikováno

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

Příspěvekod Zivan » 04 čer 2020 18:02

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

Uživatelský avatar
ITCrowd
Tvůrce článků
Elite Level 12.5
Elite Level 12.5
Příspěvky: 19759
Registrován: březen 10
Pohlaví: Muž

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

Příspěvekod ITCrowd » 04 čer 2020 18:16

Myslíš, že klikám na každý odkaz???
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

Zivan
Level 4.5
Level 4.5
Příspěvky: 1605
Registrován: leden 10
Pohlaví: Nespecifikováno

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

Příspěvekod Zivan » 04 čer 2020 18:26

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

Uživatelský avatar
ITCrowd
Tvůrce článků
Elite Level 12.5
Elite Level 12.5
Příspěvky: 19759
Registrován: březen 10
Pohlaví: Muž

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

Příspěvekod ITCrowd » 04 čer 2020 19:01

java skript na woknech je stejný jako na vbs.
C je ok.
Čili jsi dokázal, že mám pravdu.
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

Zivan
Level 4.5
Level 4.5
Příspěvky: 1605
Registrován: leden 10
Pohlaví: Nespecifikováno

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

Příspěvekod Zivan » 04 čer 2020 19:20

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

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7039
Registrován: prosinec 10
Pohlaví: Muž

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

Příspěvekod faraon » 04 čer 2020 21:16

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:
Naposledy upravil(a) faraon dne 04 čer 2020 21:23, celkem upraveno 1 x.
"Dokud nebyly počítače, programování nebylo problémem.
Jestliže bylo několik slabých počítačů, bylo programování malým problémem.
Když však programátoři získali počítače na svou dobu ohromné síly, stalo se také programování ohromným problémem."

E. W. Dijkstra, 1972

karlos64
nováček
Příspěvky: 35
Registrován: červenec 18
Pohlaví: Muž

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

Příspěvekod karlos64 » 04 čer 2020 21:22

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)

Zivan
Level 4.5
Level 4.5
Příspěvky: 1605
Registrován: leden 10
Pohlaví: Nespecifikováno

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

Příspěvekod Zivan » 05 čer 2020 07:22

faraon:
Fakt si myslis, ze udelam jednoduchy priklad pro ukazku chyby, tak mi musis vysvetlovat, co je na nem spatne? :)

Uživatelský avatar
Funstorm007
Level 4.5
Level 4.5
Příspěvky: 1972
Registrován: říjen 08
Pohlaví: Muž

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

Příspěvekod Funstorm007 » 05 čer 2020 14:20

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

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7039
Registrován: prosinec 10
Pohlaví: Muž

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

Příspěvekod faraon » 05 čer 2020 16:55

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.
"Dokud nebyly počítače, programování nebylo problémem.
Jestliže bylo několik slabých počítačů, bylo programování malým problémem.
Když však programátoři získali počítače na svou dobu ohromné síly, stalo se také programování ohromným problémem."

E. W. Dijkstra, 1972


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • excel sčítání hodnot jiného počtu
    od berate » 14 lis 2019 15:08 » v Kancelářské balíky
    4
    909
    od atari
    15 lis 2019 09:13
  • Sčítání sloupce podle více pravidel
    od luko02420 » 20 srp 2020 05:50 » v Kancelářské balíky
    0
    310
    od luko02420
    20 srp 2020 05:50
  • Přeměna čísel na IP adresu.
    od Daminekkkk » 09 dub 2020 00:43 » v Vše ostatní (hw)
    1
    368
    od CyberCodeDroid
    09 dub 2020 04:34
  • Ako funguje generovanie náhodných čísel
    od aribosstv » 30 zář 2020 15:30 » v Vše ostatní (hw)
    3
    285
    od ITCrowd
    30 zář 2020 18:01
  • Excel - seřazení podle čísel uprostřed
    od Karrex » 20 lis 2019 15:41 » v Kancelářské balíky
    10
    910
    od Zivan
    21 lis 2019 19:49

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: CommonCrawl [Bot] a 0 hostů