OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů
Právě je 16 srp 2017, 15:54

Všechny časy jsou v UTC + 1 hodina




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 4 ] 
Autor Zpráva
 Předmět příspěvku: Práce v jazyce C s velkými čísly
PříspěvekNapsal: 11 črc 2017, 20:20 
Offline
Radil

Registrován: 23 čer 2013, 22:49
Příspěvky: 452
Has thanked: 22 times
Been thanked: 65 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


Nahoru
 Profil  
 
PříspěvekNapsal: 11 črc 2017, 20:37 
Offline
Profík
Uživatelský avatar

Registrován: 23 bře 2014, 19:13
Příspěvky: 842
Has thanked: 41 times
Been thanked: 187 times
Znáš bc?

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

_________________
Lidská bytost by měla být schopná vyměnit plenku, naplánovat invazi, porazit prase, velet lodi, vyprojektovat stavbu, napsat sonet, vyrovnat účty, postavit zeď, napravit kost, zpříjemnit umírání, udržovat pořádek, plnit rozkazy, udílet rozkazy, spolupracovat, jednat sám, řešit rovnice, analyzovat nové problémy, vykydat hnůj, naprogramovat computer, uvařit chutné jídlo, zdatně bojovat, statečně zemřít. Specializace je pro hmyz.


Nahoru
 Profil  
 
PříspěvekNapsal: 12 črc 2017, 08:01 
Online
Pan Štábní

Registrován: 22 kvě 2013, 20:14
Příspěvky: 1630
Bydliště: Bratislava
Has thanked: 164 times
Been thanked: 291 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 črc 2017, 08:47 
Offline
Kecálek
Uživatelský avatar

Registrován: 31 srp 2014, 15:27
Příspěvky: 242
Bydliště: Praha
Has thanked: 12 times
Been thanked: 71 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  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 4 ] 

Všechny časy jsou v UTC + 1 hodina


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvní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