Diskuze: Proč používat omezený int, když máme neomezený BigInteger
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 12 zpráv z 12.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Nedělitelnost. Jde o to že int je 32bitu tedy 4-bytovy. 32 nebo 64bit OS tak provedou rychlí výpočet bez dalších operací. BigInt je kolos a pro práci sním se musí alokovat paměťový prostor a výpočet už není přímočarý. Zabere více času procesoru a prostoru v paměti.
Co je atomicita?
Tady to znamená, že když v jednom vláknu provádíš třeba sčítání dvou intů a v druhém ten, kam ukládáš výsledek, čteš, nikdy se ti nestane, že bys viděl třeba půlku bitů sečtenou a půlku ještě ne. Ta operaci prostě nelze rozdělit na posloupnost menších operací, které by mohl někdo pozorovat.
Tyhle atomické operace se provádí jednou instrukcí, u BigIntu a jemu podobných nic takového neexistuje – dva BigInty se sčítání postupně, takže opravdu můžeš vidět půlku bitů sečtenou a půlku ještě ne.
A to je ten rozdíl ve výkonu tak strašně zásadní, že se int/long používá i když se neomezený prostor hodí, nebo má int ještě nějakou výhodu?
No za A ano rozdíl je docela velký a za B, a to je důležitější, jak často potřebuješ v běžné aplikaci číslo větší než 2,147,483,647?
>A Jak moc velký?
>B Myslím že třeba kalkulačka nebo jakákoli početní aplikace - kdybych
byl uživatel, docela by mě mrzelo kdybych nemohl počítat s velkými
čísly
Že dvakrát pomalejší je hodně?! Kdybych programoval běžně náročnou aplikaci, byla by mi úplně jedno i ta 50x větší náročnost - nedokážu si představit že by se něco takového v běžně náročné aplikaci dalo rozpoznat
A to je ten rozdíl ve výkonu tak strašně zásadní, že se int/long používá i když se neomezený prostor hodí, nebo má int ještě nějakou výhodu?
Zjednodušeně řečeno, bigint je při operaci rozdělen na menší jednotky, pro které již existují instrukce (např. sčítání velkého intu lze řešit jako posloupnost sčítání jeho částí + nějaká ta režie, podobně třeba násobení). U normálního intu (i long long int na 64bitových platformách) se prostě použije jedna instrukce a je hotovo.
Že dvakrát pomalejší je hodně?! Kdybych programoval běžně náročnou aplikaci, byla by mi úplně jedno i ta 50x větší náročnost - nedokážu si představit že by se něco takového v běžně náročné aplikaci dalo rozpoznat
To záleží, co ta obyčejná aplikace s čísly dělá. Pokud by třeba
komprimovala data, určitě nechceš, aby autoři kompresní knihovny zvolili
tvůj přístup
. Pokud
děláš nějaké triviálnější výpočty (průměry, střední hodnoty,
histogramy...), tak nastanou problémy na větších datech.
Takže spíš je třeba uvést příklad aplikace, která s čísly bude pracovat dostatečně málo.
U výpočtově náročnější aplikace může být dost velkým problémem fakt, že používá double. Po přepsání na inty lze dosáhnout zajímavých zrychlení, které v praxi rozhodují o tom, zda je použitelná (osobní zkušenost).
Zobrazeno 12 zpráv z 12.
