OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 28.03.2024, 11:34

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 5 ] 
Autor Zpráva
 Předmět příspěvku: Práce v jazyce C s velkými čísly
PříspěvekNapsal: 11.07.2017, 21:20 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1100
Has thanked: 100 times
Been thanked: 157 times
Když už jsem vedle nakousl ten projekt Euler https://projecteuler.net/ tak jsem u některých úloh při "mírně" zvednuté obtížnosti rychle narazil na to, že běžné podporované číselné typy nejsou dostatečné. Na ZX Spectru už byl problém u 3. úlohy, kde se to už muselo řešit složitěji. Ale na 64 bitovém procesoru to není o moc lepší. V 5. úloze je problém vypsat výsledek. Že číslo které je dělitelné jedničkou, dvojkou, trojkou až číslem tisíc beze zbytku je rovno
2*2*2*2*2*2*2*2*2*3*3*3*3*3*3*5*5*5*5*7*7*7*11*11*13*13*17*17*19*19*23*23*29*29*31*31*37*41*43*47*
53*59*61*67*71*73*79*83*89*97*101*103*107*109*113*127*131*137*139*149*151*157*163*167*173*179*181*
191*193*197*199*211*223*227*229*233*239*241*251*257*263*269*271*277*281*283*293*307*311*313*317*
331*337*347*349*353*359*367*373*379*383*389*397*401*409*419*421*431*433*439*443*449*457*461*463*
467*479*487*491*499*503*509*521*523*541*547*557*563*569*571*577*587*593*599*601*607*613*617*619*
631*641*643*647*653*659*661*673*677*683*691*701*709*719*727*733*739*743*751*757*761*769*773*787*
797*809*811*821*823*827*829*839*853*857*859*863*877*881*883*887*907*911*919*929*937*941*947*953*
967*971*977*983*991*997 vypíše i ZX Spectrum, ale jak to číslo vypadá vyřeší až https://defuse.ca/big-number-calculator.htm, a nebo nějaká knihovna. GCC rozšíření __uint128_t prostě nedokáže vyřešit vše.

Tak jsem jednu napsal. Pracuje jen s unsigned long long long long... čísly. Před kompilací se zadá délka čísla. Umí základní operace jako sčítání, odčítání, násobení a dělení. A přidal jsem tam ještě druhou odmocninu, protože ta byla zatím potřeba. Nefunguje na principu číselných řetězců, ale vnitřně je to v binární formě.

Tak snad se to někomu bude hodit.
https://github.com/DW0RKiN/BigNum

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
PříspěvekNapsal: 11.07.2017, 21:37 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 times
Znáš bc?

Kód:
71288652746650930531663841557142729206683588618858930404520019911543\
24087581111499476444151913871586911717817019575256512980264067621009\
25146587100430513107268626814320019660997486274593718834370501543445\
25237397452989631456749821282369562328237940110688092623177088619795\
40791247754558049326475737829923352751796735248042463638051137034331\
21478174685087845348567802188807537324992199567205693202909939089168\
7487672697950931603520000

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
PříspěvekNapsal: 12.07.2017, 09:01 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
Sprav to v jazyku LISP. Ten ma okrem takych beznych ciselnych typov aj jeden specialny: cele cislo potencialne neobmedzenej velkosti. Cize nim mozes pocitat s exaktnou presnostou lubovolne velke cisla.


Nahoru
 Profil  
 
PříspěvekNapsal: 12.07.2017, 09:47 
Offline
Profík
Uživatelský avatar

Registrován: 31.08.2014, 16:27
Příspěvky: 993
Bydliště: Praha
Has thanked: 63 times
Been thanked: 371 times
Já jsem kdysi použil GMP. Tehdy jsem potřeboval rychle počítat s racionálními čísly (vyjádřenými jako dvojice čitatel,jmenovatel).
Ale velká celá čísla knihovna také podporuje.


Nahoru
 Profil  
 
PříspěvekNapsal: 20.04.2021, 01:55 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1972
Bydliště: Most, Praha
Has thanked: 863 times
Been thanked: 697 times
Přiživím se v tomto vlákně malou informací - vytáhl jsem na světlo svůj starší projekt: C++ knihovna pro dlouhá čísla integer a fixed-point. Rozsah do int256. http://www.breatharian.eu/hw/longint/index.html

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 5 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 3 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz