[C++] Wielkie liczby źle wyświetlany


(Maciek Hooch) #1

Witam.

Jakiego typu zmiennych mam użyć do zapisania np liczby 4458755547455.

Gdy zapisuje ją jako int lub double lub float i następnie pomnorze ją przez podobną liczbe to program mi wyświetla liczbe typu 5.35789e + 007 lub coś tego typu.


(Sawyer47) #2

Typy C++ nie radzą sobie z operowaniem na tak dużych liczbach. Możesz użyć większych, ale niestandardowych typów, które są w wielu kompilatorach. W C++0x ma być typ long long. U mnie pod g++ 4.3 i 32-bitowej architekturze największa liczbę jaką przechowa to 9223372036854775807. Jednak jeśli chcesz mnożyć tego typu liczby to i tak na nic się nie zda. Jeśli musisz operować na naprawdę dużych liczbach, użyj jakieś biblioteki. Jedna z lepszych to GMP: http://gmplib.org/


([alex]) #3

Można też samodzielnie napisać kilka procedur dla operowania na dużych liczbach, kiedyś zrobiłem to na potrzeby jakiegoś projektu ( nie pamiętam dokładnie którego :smiley: ) ciekawostką jest to że mnożenie dwóch liczb zajmujących po 256 bitów wykonuje się szybszej niż mnożenie dwóch liczb typu long double. Ostateczna wersja była z użyciem asemblera, ale nie jest to konieczne.


(Maciek Hooch) #4

To podacie mi krok po kroku jak zapisać liczbę która ma 50 cyfr. I co jak che mieć liczbę która ma 30 miejsc przed przecinkiem i 50 za nim.


([alex]) #5

Te biblioteki które istnieją dla dużych liczb, proponują wyłącznie liczby całkowite. Dla liczb zmiennoprzecinkowych niestety musisz napisać sam funkcje dodawania, odejmowania, mnożenia i dzielenia.

Będzie w tym spory problem, przede wszystkim z dokładnością obliczeń, prosty przykład: dzielisz 1 przez 3 ile miejsc po przecinku ma być w wyniku tego działania ?

Z powyższego wynika że przynajmniej operacja dzielenia musi mięć ustawienie co do dokładności obliczeń.

Algorytmy dla tych operacji (dodawania, odejmowania, mnożenia i dzielenia) znasz że szkoły, czyli dokładnie tak jak robisz to ręcznie na kartce.


(Maciek Hooch) #6

ok ściągnołem te biblioteki i nie mam zielonego pojęcia co z nimi dalej robić.


(Sawyer47) #7

Ponownie polecam biblioteki GMP i MPFR, oto linki: http://gmplib.org/ , http://www.mpfr.org/

Wszelkie informacje znajdziesz na tych stronach.


([alex]) #8

Dalej czytać dokumentację i oglądać przykłady Akurat ta biblioteka ma obsługę liczb zmiennoprzecinkowych.