< návrat zpět

MS Excel


Téma: Přehled zaokrouhlovacích funkcí Excelu rss

Zaslal/a 9.9.2015 17:45

V diskusi o zaokrouhlování se tady objevilo několik nepřesností při popisu funkcí listu pro zaokrouhlení. Vzhledem k tomu, že tyto funkce (s výjimkou ZAOKROUHLIT) prakticky nepoužívám, začal jsem mít z té diskuse v hlavě guláš.
Pro vlastní archiv jsem si zpracoval tabulku toho, co Excel nabízí. Měl bych sto chutí napsat několik peprných slov jak na adresu Microsoftu, tak zejména pro naše lokalizátory. Když se tak na tu tabulku koukám, ani se nedivím, že ve hře mezi uživateli Excelu nepanuje jasno.
Tabulka je v příloze. Je interaktivní, takže každý si může ověřit, jak které zaokrouhlování funguje. Komentář ponechám na vás.

Příloha: zip26779_testyzaokrouhleni.zip (9kB, staženo 49x)
Zaslat odpověď >

Strana:  « předchozí  1 2 3 4
#026864
avatar
Pokud ladím složitější výpočet, používám citlivostní analýzu, tabulka dat.

V případě jedné proměnné lze tak rychle zjistit a zaznamenat výsledky při různých vstupech, včetně mezivýsledků.

Pokud potřebuji otestovat více než 2 vstupy, je třeba trochu přemýšlet. Nejprve, jestli je to opravdu nutné.

Obvykle mi stačí citlivost výsledku ke změnám jednotlivých vstupů, druhá proměnná mi určuje, do která buňka se má měnit. Zjistím snadno citlivost výpočtu na různé vstupy. Fakticky tak v jednom kroku provedu více výpočtů s jednou proměnnou.

Jinak, pokud to opravdu nutné je, lze třeba tabulky zřetězit.
Fakticky jsem se k tomuto dostal když jsem zkoušel, jestli lze použít výstup z jedné tabulky dat jako vstup do druhé.

Pro jistotu, pro někoho možná některé detaily citlivostní analýzy nemusí být samozřejmé:
Vzorec, která tabulka dat vyhodnocuje, je prostý odkaz na výsledek výpočtu.
Měněné buňky jsou na listu s tabulkou a vstupy výpočtu na tyto buňky odkazují.
Pokud řeším více vstupů (citlivost, často užitečné) je nutno trochu upravit výpočet:
"Normální" vstupní data jsou jinde a v původní vstupní buňce je vzorec typu:
když(2.měněná buňka má moje číslo; vezmi 1. měněnou buňku; vezmi "normální" vstup)citovat
#026865
avatar
Opoměl jsem. Ve výpočtech je dobré vypnout přepočet tabulek.citovat
icon #026867
eLCHa
Děkuji.

Tabulku dat jsem používal před pár lety, ale nějak to vyšumělo. Takže jsem dnes s pomocí nápovědy své základy obnovil. Teď si s ní ve volných chvílích zkusím hrát.citovat
#026869
avatar
to Lubo:
možná budu za brouka Pytlíka, ale v zaslaném sešitě je Test-Lubo s výsledky 0,3/0,5 pro Ceiling a 0,8/0,8 pro RoundX a také Test-Vovka s výsledky 0,934/1,117 pro Ceiling/RoundX.
Žádné další testy jsem v sešitě nenašel. U výsledků testů pro 200 tisíc řádků je proti mým číslům lehce zavádějící přechod od mých sekund k milisekundám v těchto testech. Cca 3 sekundy na přepočet 200 tisíc řádků pro RoundX mi nepřipadne zarážející. Zarážející mi naopak připadne změřený čas pro přepočet 200 tisíc řádků Ceiling za 0,015/0,037 sec. To vypadá spíš jako chyba algoritmu, než jako reálný výsledek. Tak rychlý zase podle mých zkušeností Excel není (při vší úctě k zabudovaným funkcím Excelu).
Poslední dvojice čísel z mého testu pro 200 tisíc řádků (0,578/0,703 sec pro Ceiling/RoundX podle mého testu) to podle mne dokládá. Jde o čistý čas výpočtu, oproštěný od veškeré myslitelné režie. Lze si jen obtížně představit, že změřený čistý čas 0,578 sec výpočtu Ceiling bez režie může být vyšší než uvedený čas 0,038 sec pro přepočet stejného počtu vzorců v buňkách (což sebou jistou režii nesporně nese).
Buď jde o chybu vyhodnocení, nebo Excel funkci Ceiling přepočítává, jen když je to nutné. To by bylo chytré, ale pak by to nebyl čas přepočtu, ale čas kontroly, že počítat není nutné. O ničem podobném v souvislosti s metodou Calculate nevím. Nechám se poučit...citovat
#026871
avatar
@Vovka

Přehlédl jste jednu drobnost.
Vzhledem k rozumným omezením na velikost přikládaných souborů jsem testované listy vyplnil jen jedním řádkem.

Je tedy nutné nejprve v listech vybrat první dvě buňky, ctrl-shift-šipka dolů, ctrl-d
a pak spustit test.

Případně lze samozřejmě změnit počet vyplněných buněk.citovat
#026872
avatar
K ostatním výhradám.

Uvědomte si, že 200 tis vzorců není nic přehnaného.
Např. při 20 sloupcích se to vejde na 100 řádků.
Vzorce celkem běžně bývají složitější než je volání jedné funkce a několika sekundový přepočet podobného listu by určitě neobstál.

Metoda Calculate přepočítá jen co je nutné. Protože v testu nejprve opakovaně spustím celkový přepočet aby se vyřešily případné změny a aby se aspoň trochu rozběhl procesor je čas cca 15 msec skutečně jen časem kontroly, že nic počítat není třeba.
V případě RoundX ovšem je nutné přepočítat volatilní funkci tak se také přepočítá.

Metoda .EnableCalculation=False zakáže přepočet listu. Po jeho povolení Excel neví, jestli se něco změnilo, tak při dalším přepočtu metodou Calculate přepočte vše co je na listu.

Doba vlastního přepočtu 200 tis. funkcí Ceiling je na mém stroji cca 20 msec.

V případě volatilní RoundX se v tomto případě přepočte zase vše. Rozdíl mezi prostým přepočtem a úplným přepočtem je tedy minimální je způsoben dalšími procesy v počítači.

Slabinou Vašeho testu je, jak se už pokoušel vysvětlit eLCHa, že mícháte volání funkce/udf z listu a volání funkce metodou WorksheetFunction, případně přímé volání makra.

Tj. v případě volání Ceiling je zde poměrně velká režie metody WorksheetFunction (Vaše představa, že tam režie není, není správná), v případě volání UDF z listu je zde naopak doplňková režie (možná na kontrolu volatility, možná na kontrolu, zda funkce nedělá něco, co UDF dělat nesmí).citovat

Strana:  « předchozí  1 2 3 4

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje