nagy egészek

Fórumok

Sziasztok!

Szeretnék nagy (>(2^32)) egészeket kezelni gcc- vel. Ezt hogyan tehetem meg? Ha nem muszáj, nem szívesen használnék erre q célre double/ floatot, nincs valami direkt erre a célra használható típus? long int, long long int nem igazán akar működni. Ha esetleg nincs, hogy tennétek egyszerűen float/ double- val?

Köszi..

Hozzászólások

Volt régen ez téma a hupon, keress rá...

Konkrétan mi nem működik a long long-gal?

Konkrétan az, hogy nem igazán szereti a nagy számokat :- ):

long long int c;
c = 4333444555;

gcc nagyegesz.c
nagyegesz.c: In function `main':
nagyegesz.c:8: warning: integer constant is too large for "long" type

Mindez 32 bites rendszeren.

64 bitesen legalább lefordul, bár a kezelése ott is problémás (legalábbis printf- nél túlcsordul, de nyílván nem %d kell neki, hanem valami más, ennek utánanézek).

Az stdint.h-ban vannak ilyesmik:

http://www.opengroup.org/onlinepubs/000095399/basedefs/stdint.h.html

Pld:

Greatest-width integer types

The following type designates a signed integer type capable of representing any value of any signed integer type: intmax_t
The following type designates an unsigned integer type capable of representing any value of any unsigned integer type: uintmax_t

A GMP -t én is ajánlom, szerintem elég korrektül megcsinálták, könnyű a használata, és gyorsan meg lehet tanulni.
Ha esetleg hálózaton küldenéd át ezeket a számokat, akkor az jusson eszedbe, hogy a gmp string-ként kezeli a számokat, így pl mpz_t típusokkal nem tudsz dobálózni..:)