Diskuze: Dělení a násobení velkých čísel
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 8 zpráv z 8.
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, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Musíš si uvědomit, že primitivní typy javy mají omezenou hodnotu. Long například má pravděpodobně rozsah -9,223,372,036,854,775,808 do +9,223,372,036,854,775,807, což je hodně, ale jak říkáš, ve vyšších soustavách čísla rostou velmi rychle.
Jedna z optimalizací může být nepřevádět číslo do desítkové soustavy, což se ti hodí převážně pokud převádíš z vyšší než desítkové do vyšší než desítkové, tj. čísla budou zřejmě menší než v desítkové.
Reprezentace Stringem je úplně v pohodě. Musíš si uvědomit, že číslo jako takové nemá žádnou podobu a jeho zápis do čísla či řetězce je jen pomoc pro nás lidi.
Sčítání, odčítání je na implementaci se Stringy jednoduché. Násobení a dělení ne až tolik, ale také se s tím dá pracovat – vygoogli. Viz například https://stackoverflow.com/…-string-by-3, což není nejlepší zdroj, ale máš tam nějaké poznámky k této tématice.
Sčítání, odčítání – jedeš čísla zprava a postupně aplikuješ operaci a předáváš zbytek do vyšší pozice.
Násobení – pravděpodobně hloupá implementace by bylo to dělat tak, jak to dělají lidé, tj. zprava vynásobíš všechno prvním číslem (tím kterým násobíš) zprava, pak znova druhým číslem (tím kterým násobíš) zprava a postupně aplikovat již vytvořené sčítání atp. aby ses dočkal požadovaného výsledku.
Dělení už není tak jednoduché, ale jakmile si uvědomíš že dělení je operace, který ti řekne "kolikrát se něco vejde" a "jaký je zbytek", na nějakou implementaci přijdeš taky.
Použil bych <a href='http://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html'>BigDecimal</a>
Jak se dá v tomto případě BigDecimal použít?
Nevím, jak převést např. "12A" do BigDecimal
Aha tak na tohle konkrétně bych teda použil BigInteger. BigDecimal je pro velká čísla s desetinnou čárkou, BigInteger je pro velká celá čísla, lze mezi nimi jednoduše převádět. BigInteger umí rovnou načíst hexadecimální číslo jako string, stačí mu udat v jaké soustavě to je:
String cislo = "12A";
BigInteger c = new BigInteger(cislo, 16);
//v 'c' teďka máš číslo 12A, protože jsi BigIntegeru řekl, že je to v 16kové soustavě, tak si to interně převedl a uložil podle svého
//takže mužeš pro 'převod' do jiné soustavy udělat:
System.out.println("hexadecimální číslo: " + c.toString(16) + " v decimální soustavě: " + c.toString(10));
Vypadá to, že ten BigDecimal opravdu umožňuje pojmout ohromné číslo. Hustý.
Podle tohoto https://stackoverflow.com/…6661/3281252 by to mělo jít pouhým napsáním soustavy jako druhý parametr. Je to příklad pro BigInteger, ale pro BigDecimal to půjde určo obdoběně.
Děkuji za pomoc při řešení. Funguje skvěle 
Zobrazeno 8 zpráv z 8.