Decimals¶
Data Type¶
The decimal data type is called mpd_t
, which is short for
multi precision decimal.
#include <mpdecimal.h>
typedef struct mpd_t {
uint8_t flags; // [memory flags] | [specials] | sign
mpd_ssize_t exp; // exponent
mpd_ssize_t digits; // number of decimal digits
mpd_ssize_t len; // number of words in use
mpd_ssize_t alloc; // number of allocated words
mpd_uint_t *data; // words
} mpd_t;
The flags contain two types of information: The lowest bit is the sign of the
decimal. The following three bits determine whether the decimal is Infinity,
NaN or sNaN. The upper four bits carry the information how the storage was
allocated. The normal case is that both the struct and the data have been
dynamically allocated by mpd_new
. More on this in the section
Advanced Memory Handling.
Allocation Functions¶
mpd_t *mpd_qnew(void);
mpd_t *mpd_new(mpd_context_t *ctx);
mpd_qnew
attempts to allocate a dynamic decimal with MPD_MINALLOC
words reserved for the coefficient. If successful, the return value is the new
pointer, NULL
otherwise. mpd_new
is the same, but raises the
MPD_Malloc_error
exception on failure.
mpd_t *mpd_qnew_size(mpd_ssize_t size);
Same as mpd_qnew
, but the size argument indicates that size words
should be allocated for the coefficient rather than MPD_MINALLOC
words.
void mpd_del(mpd_t *dec);
mpd_del
frees all storage allocated for a decimal. The function may
also be called with a completely or partly static decimal as an argument, see
Advanced Memory Handling.