mp_base._mp_d Property

GMP Native Interface for .NET

mp_base_mp_d Property
A pointer to an array of limbs which is the magnitude.

Namespace:  Math.Gmp.Native
Assembly:  Math.Gmp.Native (in Math.Gmp.Native.dll) Version: 1.0.0.0 (1.0.0.0)
Syntax
public virtual mp_ptr _mp_d { get; }
Public Overridable ReadOnly Property _mp_d As mp_ptr
	Get
public:
virtual property mp_ptr^ _mp_d {
	mp_ptr^ get ();
}
abstract _mp_d : mp_ptr with get
override _mp_d : mp_ptr with get

Property Value

Type: mp_ptr
Remarks

In mpz_t:

A pointer to an array of limbs which is the magnitude. These are stored “little endian” as per the mpn functions, so _mp_d[0] is the least significant limb and _mp_d[ABS(_mp_size) - 1] is the most significant. Whenever _mp_size is non-zero, the most significant limb is non-zero.

Currently there’s always at least one limb allocated, so for instance gmp_lib.mpz_set_ui never needs to reallocate, and gmp_lib.mpz_get_ui can fetch _mp_d[0] unconditionally (though its value is then only wanted if _mp_size is non-zero).

In mpz_t:

A pointer to the array of limbs which is the absolute value of the mantissa. These are stored "little endian" as per the mpn functions, so _mp_d[0] is the least significant limb and _mp_d[ABS(_mp_size)-1] the most significant.

The most significant limb is always non-zero, but there are no other restrictions on its value, in particular the highest 1 bit can be anywhere within the limb.

_mp_prec + 1 limbs are allocated to mp_base._mp_d, the extra limb being for convenience (see below). There are no reallocations during a calculation, only in a change of precision with gmp_lib.mpf_set_prec.

See Also