Copyright (C) 2004 Linas Vepstas <linas@linas.org>
Definition in file gnc-numeric.h.
Go to the source code of this file.
Data Structures | |
struct | _gnc_numeric |
Arguments Standard Arguments to most functions | |
Most of the gnc_numeric arithmetic functions take two arguments in addition to their numeric args: 'denom', which is the denominator to use in the output gnc_numeric object, and 'how'. which describes how the arithmetic result is to be converted to that denominator. This combination of output denominator and rounding policy allows the results of financial and other rational computations to be properly rounded to the appropriate units. Valid values for denom are: GNC_DENOM_AUTO -- compute denominator exactly integer n -- Force the denominator of the result to be this integer GNC_DENOM_RECIPROCAL -- Use 1/n as the denominator (???huh???) Valid values for 'how' are bitwise combinations of zero or one "rounding instructions" with zero or one "denominator types". Valid rounding instructions are: GNC_HOW_RND_FLOOR GNC_HOW_RND_CEIL GNC_HOW_RND_TRUNC GNC_HOW_RND_PROMOTE GNC_HOW_RND_ROUND_HALF_DOWN GNC_HOW_RND_ROUND_HALF_UP GNC_HOW_RND_ROUND GNC_HOW_RND_NEVER The denominator type specifies how to compute a denominator if GNC_DENOM_AUTO is specified as the 'denom'. Valid denominator types are: GNC_HOW_DENOM_EXACT GNC_HOW_DENOM_REDUCE GNC_HOW_DENOM_LCD GNC_HOW_DENOM_FIXED GNC_HOW_DENOM_SIGFIGS(N) To use traditional rational-number operational semantics (all results are exact and are reduced to relatively-prime fractions) pass the argument GNC_DENOM_AUTO as 'denom' and GNC_HOW_DENOM_REDUCE| GNC_HOW_RND_NEVER as 'how'.
To enforce strict financial semantics (such that all operands must have the same denominator as each other and as the result), use GNC_DENOM_AUTO as 'denom' and GNC_HOW_DENOM_FIXED | GNC_HOW_RND_NEVER as 'how'. | |
#define | GNC_NUMERIC_RND_MASK 0x0000000f |
bitmasks for HOW flags. | |
#define | GNC_NUMERIC_DENOM_MASK 0x000000f0 |
#define | GNC_NUMERIC_SIGFIGS_MASK 0x0000ff00 |
#define | GNC_HOW_DENOM_SIGFIGS(n) ( ((( n ) & 0xff) << 8) | GNC_HOW_DENOM_SIGFIG) |
#define | GNC_HOW_GET_SIGFIGS(a) ( (( a ) & 0xff00 ) >> 8) |
#define | GNC_DENOM_AUTO 0 |
#define | GNC_DENOM_RECIPROCAL(a) (- ( a )) |
enum | { GNC_HOW_RND_FLOOR = 0x01, GNC_HOW_RND_CEIL = 0x02, GNC_HOW_RND_TRUNC = 0x03, GNC_HOW_RND_PROMOTE = 0x04, GNC_HOW_RND_ROUND_HALF_DOWN = 0x05, GNC_HOW_RND_ROUND_HALF_UP = 0x06, GNC_HOW_RND_ROUND = 0x07, GNC_HOW_RND_NEVER = 0x08 } |
Rounding/Truncation modes for operations. More... | |
enum | { GNC_HOW_DENOM_EXACT = 0x10, GNC_HOW_DENOM_REDUCE = 0x20, GNC_HOW_DENOM_LCD = 0x30, GNC_HOW_DENOM_FIXED = 0x40, GNC_HOW_DENOM_SIGFIG = 0x50 } |
enum | GNCNumericErrorCode { GNC_ERROR_OK = 0, GNC_ERROR_ARG = -1, GNC_ERROR_OVERFLOW = -2, GNC_ERROR_DENOM_DIFF = -3, GNC_ERROR_REMAINDER = -4 } |
Deprecated, backwards-compatible definitions | |
#define | GNC_RND_FLOOR GNC_HOW_RND_FLOOR |
#define | GNC_RND_CEIL GNC_HOW_RND_CEIL |
#define | GNC_RND_TRUNC GNC_HOW_RND_TRUNC |
#define | GNC_RND_PROMOTE GNC_HOW_RND_PROMOTE |
#define | GNC_RND_ROUND_HALF_DOWN GNC_HOW_RND_ROUND_HALF_DOWN |
#define | GNC_RND_ROUND_HALF_UP GNC_HOW_RND_ROUND_HALF_UP |
#define | GNC_RND_ROUND GNC_HOW_RND_ROUND |
#define | GNC_RND_NEVER GNC_HOW_RND_NEVER |
#define | GNC_DENOM_EXACT GNC_HOW_DENOM_EXACT |
#define | GNC_DENOM_REDUCE GNC_HOW_DENOM_REDUCE |
#define | GNC_DENOM_LCD GNC_HOW_DENOM_LCD |
#define | GNC_DENOM_FIXED GNC_HOW_DENOM_FIXED |
#define | GNC_DENOM_SIGFIG GNC_HOW_DENOM_SIGFIG |
#define | GNC_DENOM_SIGFIGS(X) GNC_HOW_DENOM_SIGFIGS(X) |
#define | GNC_NUMERIC_GET_SIGFIGS(X) GNC_HOW_GET_SIGFIGS(X) |
Constructors | |
gnc_numeric | double_to_gnc_numeric (double in, gint64 denom, gint how) |
gboolean | string_to_gnc_numeric (const gchar *str, gnc_numeric *n) |
gnc_numeric | gnc_numeric_error (GNCNumericErrorCode error_code) |
Value Accessors | |
gdouble | gnc_numeric_to_double (gnc_numeric in) |
gchar * | gnc_numeric_to_string (gnc_numeric n) |
gchar * | gnc_num_dbg_to_string (gnc_numeric n) |
Comparisons and Predicates | |
GNCNumericErrorCode | gnc_numeric_check (gnc_numeric a) |
gint | gnc_numeric_compare (gnc_numeric a, gnc_numeric b) |
gboolean | gnc_numeric_zero_p (gnc_numeric a) |
gboolean | gnc_numeric_negative_p (gnc_numeric a) |
gboolean | gnc_numeric_positive_p (gnc_numeric a) |
gboolean | gnc_numeric_eq (gnc_numeric a, gnc_numeric b) |
gboolean | gnc_numeric_equal (gnc_numeric a, gnc_numeric b) |
gint | gnc_numeric_same (gnc_numeric a, gnc_numeric b, gint64 denom, gint how) |
Arithmetic Operations | |
gnc_numeric | gnc_numeric_add (gnc_numeric a, gnc_numeric b, gint64 denom, gint how) |
gnc_numeric | gnc_numeric_sub (gnc_numeric a, gnc_numeric b, gint64 denom, gint how) |
gnc_numeric | gnc_numeric_mul (gnc_numeric a, gnc_numeric b, gint64 denom, gint how) |
gnc_numeric | gnc_numeric_div (gnc_numeric x, gnc_numeric y, gint64 denom, gint how) |
gnc_numeric | gnc_numeric_neg (gnc_numeric a) |
gnc_numeric | gnc_numeric_abs (gnc_numeric a) |
Arithmetic Functions with Exact Error Returns | |
gnc_numeric | gnc_numeric_add_with_error (gnc_numeric a, gnc_numeric b, gint64 denom, gint how, gnc_numeric *error) |
gnc_numeric | gnc_numeric_sub_with_error (gnc_numeric a, gnc_numeric b, gint64 denom, gint how, gnc_numeric *error) |
gnc_numeric | gnc_numeric_mul_with_error (gnc_numeric a, gnc_numeric b, gint64 denom, gint how, gnc_numeric *error) |
gnc_numeric | gnc_numeric_div_with_error (gnc_numeric a, gnc_numeric b, gint64 denom, gint how, gnc_numeric *error) |
Change Denominator | |
gnc_numeric | gnc_numeric_convert (gnc_numeric in, gint64 denom, gint how) |
gnc_numeric | gnc_numeric_convert_with_error (gnc_numeric in, gint64 denom, gint how, gnc_numeric *error) |
gnc_numeric | gnc_numeric_reduce (gnc_numeric in) |
Typedefs | |
typedef _gnc_numeric | gnc_numeric |
An rational-number type. |