/ / Jak zdobyć bajt zlicza części rzeczywistego typu zdefiniowane w C używając GMP - c, zmiennoprzecinkowe, gmp

Jak zdobyć bajt zlicza części rzeczywistego typu zdefiniowane w C używając GMP - c, zmiennoprzecinkowe, gmp

Odziedziczyłem projekt napisany w C, który używa rzeczywistego typu liczbowego odwzorowanego na wielokrotną liczbę zmiennoprzecinkową z Biblioteki arytmetycznej GNU (ang. Multiple Precision Arithmetic Library, GMP).

W czasie wykonywania, aby przetestować liczbę bajtów dla tego typu liczb rzeczywistych, mogę uruchomić:

printf("Storage size for Real type: %d bytesn", sizeof(Real));

Daje 24 bajty, czyli 192 bity.

Jednak plik definiujący klasę ma również następujące wiersze:

#define REAL_EPSILON 1e-24
#define REAL_FORMAT "% 25.24Fe"
#define REAL_IOTA 1e-96
#define REAL_PRECISION 128

Czy ktoś może rzucić jakiekolwiek światło na te linie? Jestem szczególnie zaniepokojony, czy ostatnia linia wskazuje 128 bitów, lub 16 bajtów, jest podana do liczby bajtów dla części dziesiętnej liczby.

Odpowiedzi:

2 dla odpowiedzi № 1

Idea GMP, GNU Wielokrotność Precyzyjna biblioteka arytmetyczna, która jest w stanie obsłużyć wielokrotność (i bardzo duże) precyzji. Dlatego ustalony rozmiar, który sizeof może zwrócić dla swojego typu danych zmiennoprzecinkowych nie ma sensu.

Numery GMP są realizowane za pomocą nagłówkastruct, z jednym lub większą liczbą wskaźników do rzeczywistych danych, gdzie jest przechowywana rzeczywista liczba. To może być bardzo duża liczba, przechowywana z tysiącami lub milionami bitów.

sizeof jest wbudowanym operatorem C i po prostu podaje rozmiar struktury nagłówka. Ten wynik oznacza, że ​​struktura nagłówka ma 24 bajty. To robi nie mieć cokolwiek wspólnego z precyzją lub liczbą cyfr.