Dlouhá aritmetika? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dlouhá  aritmetika? – C / C++ – Fórum – Programujte.comDlouhá aritmetika? – C / C++ – Fórum – Programujte.com

 

randomák
~ Anonymní uživatel
4 příspěvky
27. 2. 2016   #1
-
0
-

Ahoj,

co se myslí v programování výrazem dlouhá aritmetika? Nemůžu používat normální integer, protože se tam prý, tak dlouhé číslo nenarve. Takže asi použít spojáky, stromy?

Díky

Nahlásit jako SPAM
IP: 193.90.12.–
PiranhaGreg0
Stálý člen
27. 2. 2016   #2
-
0
-

long (dlouhý) je v C/C++ datový typ, který má oproti intu větší rozsah hodnot. Nemyslel jsi tohle?

Nahlásit jako SPAM
IP: 2001:718:2:a2::16...–
randomák
~ Anonymní uživatel
4 příspěvky
28. 2. 2016   #3
-
0
-

Tam jde o to, že uživatel může překročit i datový typ long...

Vím, že je to trochu nereálný, ale je to tak :D

Nahlásit jako SPAM
IP: 80.186.64.–
ondrej39+1
Věrný člen
28. 2. 2016   #4
-
0
-

#3 randomák
V případě překročení i takového datové typu a potřebě operovat s takhle velkými čísly ti nezbývá nic jiného než si vytvořit vlastní datový typ (a to ne pouze jako typedef ale kompletní třídu zabalující chování), typ, který s takovými čísly bude umět pracovat, nebo použít již existující knihovnu.

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
PiranhaGreg0
Stálý člen
28. 2. 2016   #5
-
0
-

Trochu bych upravil radu od Ondry... na 100% použij již hotovou knihovnu ;-). Na netu se jich válí mraky... Za mě vede GMP.

Nahlásit jako SPAM
IP: 2001:718:2:a2::16...–
vitamin+8
Grafoman
29. 2. 2016   #6
-
0
-

Ešte existuje long long.

Platí že sizeof(int) <= sizeof(long) <= sizeof(long long). Čiže int môže byť rovnako veľký ako long int...

Nahlásit jako SPAM
IP: 195.28.77.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
randomák
~ Anonymní uživatel
4 příspěvky
29. 2. 2016   #7
-
0
-

To já spíše myslel, že dlohou aritmetikou se myslí například:

Když mám číslo uložené po cifrách ve spojovém seznamu...

Nahlásit jako SPAM
IP: 158.69.214.–
peter
~ Anonymní uživatel
3981 příspěvků
29. 2. 2016   #8
-
0
-

http://www.cplusplus.com/doc/tutorial/variables/

Nevim, jaka je to knihovna, ale mi prijde inteligentni zapisovat
uint8 | unsigned short int
uint16 | unsigned int
uint32 | unsigned long int
uint64 | unsigned long long int
u jako unsigned, int jako integer a pocet bitu. Vsechno ostatni zapisy, co jsem zatim videl, jsou nesmysl, chaos, treba tady za tou carkou z cpp.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:d1d3:8c...–
peter
~ Anonymní uživatel
3981 příspěvků
29. 2. 2016   #9
-
0
-

oprava
uint8 | signed char

Tohle cpp pojmenovani mi prijde tale zcela nelogicke :) Tri ruzne nazvy pro float typ.
float16 | float
float32 | double
float64 | long double

Nahlásit jako SPAM
IP: 2001:718:2601:26c:d1d3:8c...–
Ovrscout
~ Anonymní uživatel
113 příspěvků
29. 2. 2016   #10
-
0
-

#9 peter
Mno chaos to možná je, ale dost možná ještě větší než si myslíš.
Původní typy (char,int,long) jsou definované  tak jak jsou definované zřejmně kvůli snadnějšímu portování překladačů(pro portování aplikací to múže být i trochu nevýhoda, záleží jak je aplikace napsaná).
To přiřazení co jsi napsal platí jen na některých platformách/překladačích. Na modernějších překladačích (od C99) je proto, pokud potřebuješ konkrétní velikost typu,lepší používat standardizovaný #include <stdint.h> a typy jako int32_t atp. Mnohdy je to ale jedno a třeba pro for cyklus může být celkem jedno jaký typ číselné proměnné se použije pokud je dostatečně velký. Dokonce může být rychlejší použití int než uint8_t.
Jinak ty knihovny na práci s velkými čísly jsou většinou pro práci s opravdu opravdu velkými čísly kde ti již 64bitů nestačí.

Nahlásit jako SPAM
IP: 193.165.79.–
peter
~ Anonymní uživatel
3981 příspěvků
29. 2. 2016   #11
-
0
-

Preci, kdyz je neco standard, tak to neni treba includovat. U cpp je to presne naopak. Tam se nove vymyslene veci musi importovat, aby clovek mohl pracovat :)

Nahlásit jako SPAM
IP: 2001:718:2601:26c:d1d3:8c...–
vitamin+8
Grafoman
29. 2. 2016   #12
-
0
-

#11 peter
Standard je ak sa to nachádza v c/c++ standarde. S includovaním to nemá nič spoločné.

Nahlásit jako SPAM
IP: 195.28.77.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Ovrscout
~ Anonymní uživatel
113 příspěvků
29. 2. 2016   #13
-
0
-

#11 peter
:) mno pokud vim tak to plati tak akorat pokud pouzivas precompiled headers(VS studio t má v defaultu), což je tak trochu hack pro rychlou kompilaci, vlastne se to pak chova tak jako kdyz se na zacatek vsech c/cpp souboru vlozi include nekterych standardnich souboru. Bez tohoto, se naopak musi includovat skoro vsechno vcetne i tak základních věcí jako math a string.

No a s temi standardy, ono jich jak pro C tak pro C++  vznikla celá řada, za ty roky se specifikace nejen zpřesnila ale i rozrostla o nové věci. zkus zagooglit rozdíly třeba C89/C99 C++98/C++14 . Např. pokud si pamatuji správně tak treba v C89 zadne stdint.h -> uint32_t a podobne typy nebyly (ackoliv nektere C89 kompatibilni prekladace to pozdeji v sobe meli integrovano, ve standardu C89 to nebylo, az v C99)

Nahlásit jako SPAM
IP: 193.165.79.–
randomák
~ Anonymní uživatel
4 příspěvky
29. 2. 2016   #14
-
0
-

Mě jde o to, že kdybych třeba chtěl zobrazit například Eulerovo číslo na dejme tomu 3 miliony desetinných míst jak na to :D

Protože třeba takový příklad zní dost šíleně....

Nahlásit jako SPAM
IP: 104.192.0.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

Aritmetika ukazovatov — založil devilfish

Smernikova aritmetika — založil bbeni

Dlouha cisla — založil tymes.jan

Pascal - Dlouhá Čísla — založil satanůvprd

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý