Velká čísla   zodpovězená otázka

VB.NET

Poradil by mi někdo, jak mám pracovat s velkou proměnnou (pro představu má asi 5000 cifer a pár desetinných míst), která se mi nevejde do datového typu? Potřeboval bych s ní pracovat podobně jako v Kalkulačce z třetího dílu Začínáme.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Obávám se, že na takhle velká čísla vám nic nepomůže. Budete muset sčítat, odčítat, násobit a dělit jako nás to všechny učili ve škole - pod sebe. Sčítání bude vypadat takto:

Dim c1 As String = " 123456789"   'musíte čísla správně zarovnat
Dim c2 As String = "9876543210"   '  na stejnou délku
Dim c3 As String = ""

Dim prenos As Integer = 0
'projít všechny sloupce odzadu
For i As Integer = c1.Length - 1 To 0
  'spočítat součet sloupečku i
  Dim mezisoucet As Integer = CInt(c1(i)) + CInt(c2(i)) + prenos
  'pokud je součet větší než deset, "držet" si jedničku, kterou přičteme dál
  prenos = mezisoucet \ 10
  'zapsat číslici (po odečtení případné desítky) do výsledku (odzadu)
  c3 = CStr(mezisoucet Mod 10) & c3
Next

Odčítání, násobení a dělení bude fungovat podobně. Asi by bylo lepší udělat nějaké optimalizace (místo Stringu mít pole bajtů a uchovávat to po cifrách, nebo rozsekat číslo po skupinách po desíti a sčítat je zvlášť (normálním sčítáním) a pak to dát nějak dohromady atd.). Záleží, kolik výpočtů budete provádět.

Připravte se na ale to, že tyto matematické operace budou opravdu velmi pomalé, nedělejte jich tedy moc za sebou. Smím se zeptat, na co potřebujete tak obrovskou přesnot? V běžné praxi se s tím příliš nesetkáváme.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji za tak rychlou odpověď. Prográmek vhodný pro takto velká čísla jsem kdysi vyděl na internetu, ale uměl jen umocňovat, další programy uměly jen počítat číslo pi atd., rád bych proto zkusil udělat něco podobného, čemu by se zadalo, co má udělat (vypočítat pi pomocí součtu zlomků atd. - spíše pro demonstraci té které funkce, tolik cifer je jen pro lepší představu velmi velikých čísel - většina lidí vidí 10^1000 a jen pokrčí rameny, kvůli nepředstavitelnosti, ale když uvidí tisíc nul reakce je jiná). Vím, že se bude počítat velmi dlouho, ale u takovýchto programů se s to musí přetrpět. Jestli si mi to někdy povede napsat, tak se tím pochlubím (pokud budete mít zájem).

Děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback