High precision numerical type, implementing Q64.64 fixed precision. More...
#include "int64x64-128.h"
Public Types | |
enum | impl_type { int128_impl , cairo_impl , ld_impl , int128_impl , cairo_impl , ld_impl , int128_impl , cairo_impl , ld_impl } |
Type tag for the underlying implementation. More... | |
enum | impl_type { int128_impl , cairo_impl , ld_impl , int128_impl , cairo_impl , ld_impl , int128_impl , cairo_impl , ld_impl } |
Type tag for the underlying implementation. More... | |
enum | impl_type { int128_impl , cairo_impl , ld_impl , int128_impl , cairo_impl , ld_impl , int128_impl , cairo_impl , ld_impl } |
Type tag for the underlying implementation. More... | |
Public Member Functions | |
int64x64_t () | |
Default constructor. More... | |
int64x64_t () | |
Default constructor. More... | |
int64x64_t () | |
Default constructor. More... | |
int64x64_t (const int64_t hi, const uint64_t lo) | |
Construct from explicit high and low values. More... | |
int64x64_t (const int64_t hi, const uint64_t lo) | |
Construct from explicit high and low values. More... | |
int64x64_t (const int64x64_t &o) | |
Copy constructor. More... | |
int64x64_t (const int64x64_t &o) | |
Copy constructor. More... | |
int64x64_t (const int64x64_t &o) | |
Copy constructor. More... | |
int64x64_t (int64_t hi, uint64_t lo) | |
Construct from explicit high and low values. More... | |
double | GetDouble (void) const |
Get this value as a double. More... | |
double | GetDouble (void) const |
Get this value as a double. More... | |
double | GetDouble (void) const |
Get this value as a double. More... | |
int64_t | GetHigh (void) const |
Get the integer portion. More... | |
int64_t | GetHigh (void) const |
Get the integer portion. More... | |
int64_t | GetHigh (void) const |
Get the integer portion. More... | |
int64_t | GetInt (void) const |
Truncate to an integer. More... | |
int64_t | GetInt (void) const |
Truncate to an integer. More... | |
int64_t | GetInt (void) const |
Truncate to an integer. More... | |
uint64_t | GetLow (void) const |
Get the fractional portion of this value, unscaled. More... | |
uint64_t | GetLow (void) const |
Get the fractional portion of this value, unscaled. More... | |
uint64_t | GetLow (void) const |
Get the fractional portion of this value, unscaled. More... | |
void | MulByInvert (const int64x64_t &o) |
Multiply this value by a Q0.128 value, presumably representing an inverse, completing a division operation. More... | |
void | MulByInvert (const int64x64_t &o) |
Multiply this value by a Q0.128 value, presumably representing an inverse, completing a division operation. More... | |
void | MulByInvert (const int64x64_t &o) |
Multiply this value by a Q0.128 value, presumably representing an inverse, completing a division operation. More... | |
operator bool () const | |
Explicit bool conversion. More... | |
operator bool () const | |
Explicit bool conversion. More... | |
operator bool () const | |
Explicit bool conversion. More... | |
int64x64_t & | operator= (const int64x64_t &o) |
Assignment. More... | |
int64x64_t & | operator= (const int64x64_t &o) |
Assignment. More... | |
int64x64_t & | operator= (const int64x64_t &o) |
Assignment. More... | |
int64_t | Round (void) const |
Round to the nearest int. More... | |
int64_t | Round (void) const |
Round to the nearest int. More... | |
int64_t | Round (void) const |
Round to the nearest int. More... | |
Construct from a floating point value. | |
int64x64_t (const double value) | |
Constructor from a floating point. More... | |
int64x64_t (const long double value) | |
Constructor from a floating point. More... | |
int64x64_t (const double value) | |
Constructor from a floating point. More... | |
int64x64_t (const long double value) | |
Constructor from a floating point. More... | |
int64x64_t (double value) | |
Constructor from a floating point. More... | |
int64x64_t (long double value) | |
Constructor from a floating point. More... | |
Construct from an integral type. | |
int64x64_t (const int v) | |
Construct from an integral type. More... | |
int64x64_t (const long int v) | |
Construct from an integral type. More... | |
int64x64_t (const long long int v) | |
Construct from an integral type. More... | |
int64x64_t (const unsigned int v) | |
Construct from an integral type. More... | |
int64x64_t (const unsigned long int v) | |
Construct from an integral type. More... | |
int64x64_t (const unsigned long long int v) | |
Construct from an integral type. More... | |
int64x64_t (const int128_t v) | |
Construct from an integral type. More... | |
int64x64_t (const int v) | |
Construct from an integral type. More... | |
int64x64_t (const long int v) | |
Construct from an integral type. More... | |
int64x64_t (const long long int v) | |
Construct from an integral type. More... | |
int64x64_t (const unsigned int v) | |
Construct from an integral type. More... | |
int64x64_t (const unsigned long int v) | |
Construct from an integral type. More... | |
int64x64_t (const unsigned long long int v) | |
Construct from an integral type. More... | |
int64x64_t (int v) | |
Construct from an integral type. More... | |
int64x64_t (long int v) | |
Construct from an integral type. More... | |
int64x64_t (long long int v) | |
Construct from an integral type. More... | |
int64x64_t (unsigned int v) | |
Construct from an integral type. More... | |
int64x64_t (unsigned long int v) | |
Construct from an integral type. More... | |
int64x64_t (unsigned long long int v) | |
Construct from an integral type. More... | |
Static Public Member Functions | |
static int64x64_t | Invert (const uint64_t v) |
Compute the inverse of an integer value. More... | |
static int64x64_t | Invert (const uint64_t v) |
Compute the inverse of an integer value. More... | |
static int64x64_t | Invert (uint64_t v) |
Compute the inverse of an integer value. More... | |
Static Public Attributes | |
static enum impl_type | implementation = int128_impl |
Type tag for this implementation. More... | |
Private Member Functions | |
void | Div (const int64x64_t &o) |
Implement /= . More... | |
void | Div (const int64x64_t &o) |
Implement /= . More... | |
std::pair< int64_t, uint64_t > | GetHighLow (void) const |
Get the high and low portions of this value. More... | |
void | Mul (const int64x64_t &o) |
Implement *= . More... | |
void | Mul (const int64x64_t &o) |
Implement *= . More... | |
Static Private Member Functions | |
static cairo_uint128_t | Udiv (const cairo_uint128_t a, const cairo_uint128_t b) |
Unsigned division of Q64.64 values. More... | |
static uint128_t | Udiv (const uint128_t a, const uint128_t b) |
Unsigned division of Q64.64 values. More... | |
static cairo_uint128_t | Umul (const cairo_uint128_t a, const cairo_uint128_t b) |
Unsigned multiplication of Q64.64 values. More... | |
static uint128_t | Umul (const uint128_t a, const uint128_t b) |
Unsigned multiplication of Q64.64 values. More... | |
static cairo_uint128_t | UmulByInvert (const cairo_uint128_t a, const cairo_uint128_t b) |
Unsigned multiplication of Q64.64 and Q0.128 values. More... | |
static uint128_t | UmulByInvert (const uint128_t a, const uint128_t b) |
Unsigned multiplication of Q64.64 and Q0.128 values. More... | |
Private Attributes | |
int128_t | _v |
The Q64.64 value. More... | |
cairo_int128_t | _v |
The Q64.64 value. More... | |
long double | _v |
The Q64.64 value. More... | |
Static Private Attributes | |
static const uint128_t | HP128_MASK_HI_BIT = (((int128_t)1) << 127) |
uint128_t high bit (sign bit). More... | |
static const uint64_t | HP_MASK_HI = ~HP_MASK_LO |
Mask for sign + integer part. More... | |
static const uint64_t | HP_MASK_LO = 0xffffffffffffffffULL |
Mask for fraction part. More... | |
static const uint64_t | HPCAIRO_MASK_HI_BIT = (((uint64_t)1) << 63) |
High bit of fractional part. More... | |
Friends | |
Arithmetic Operators | |
Arithmetic operators for int64x64_t. | |
bool | operator== (const int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
bool | operator< (const int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
bool | operator> (const int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
int64x64_t & | operator+= (int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
int64x64_t & | operator-= (int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
int64x64_t & | operator*= (int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
int64x64_t & | operator/= (int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
bool | operator== (const int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
bool | operator< (const int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
bool | operator> (const int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
int64x64_t & | operator+= (int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
int64x64_t & | operator-= (int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
int64x64_t & | operator*= (int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
int64x64_t & | operator/= (int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
bool | operator== (const int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
bool | operator< (const int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
bool | operator> (const int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
int64x64_t & | operator+= (int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
int64x64_t & | operator-= (int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
int64x64_t & | operator*= (int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
int64x64_t & | operator/= (int64x64_t &lhs, const int64x64_t &rhs) |
Arithmetic operator. More... | |
Unary Operators | |
Unary operators for int64x64_t. | |
int64x64_t | operator+ (const int64x64_t &lhs) |
Unary operator. More... | |
int64x64_t | operator- (const int64x64_t &lhs) |
Unary operator. More... | |
int64x64_t | operator! (const int64x64_t &lhs) |
Unary operator. More... | |
int64x64_t | operator+ (const int64x64_t &lhs) |
Unary operator. More... | |
int64x64_t | operator- (const int64x64_t &lhs) |
Unary operator. More... | |
int64x64_t | operator! (const int64x64_t &lhs) |
Unary operator. More... | |
int64x64_t | operator+ (const int64x64_t &lhs) |
Unary operator. More... | |
int64x64_t | operator- (const int64x64_t &lhs) |
Unary operator. More... | |
int64x64_t | operator! (const int64x64_t &lhs) |
Unary operator. More... | |
High precision numerical type, implementing Q64.64 fixed precision.
Definition at line 55 of file int64x64-128.h.
Type tag for the underlying implementation.
A few testcases are are sensitive to implementation, specifically the double implementation. To handle this, we expose the underlying implementation type here.
Definition at line 86 of file int64x64-128.h.
Type tag for the underlying implementation.
A few testcases are sensitive to implementation, specifically the double implementation. To handle this, we expose the underlying implementation type here.
Definition at line 69 of file int64x64-cairo.h.
Type tag for the underlying implementation.
A few testcases are are sensitive to implementation, specifically the double implementation. To handle this, we expose the underlying implementation type here.
Definition at line 68 of file int64x64-double.h.
|
inline |
Default constructor.
Definition at line 97 of file int64x64-128.h.
Referenced by Invert().
|
inline |
Constructor from a floating point.
[in] | value | Floating value to represent. |
Definition at line 109 of file int64x64-128.h.
References _v.
|
inline |
Constructor from a floating point.
[in] | value | Floating value to represent. |
Definition at line 114 of file int64x64-128.h.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 153 of file int64x64-128.h.
References _v.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 158 of file int64x64-128.h.
References _v.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 163 of file int64x64-128.h.
References _v.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 168 of file int64x64-128.h.
References _v.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 173 of file int64x64-128.h.
References _v.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 178 of file int64x64-128.h.
References _v.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 183 of file int64x64-128.h.
|
inlineexplicit |
Construct from explicit high and low values.
[in] | hi | Integer portion. |
[in] | lo | Fractional portion, already scaled to HP_MAX_64. |
Definition at line 194 of file int64x64-128.h.
References _v.
|
inline |
|
inline |
|
inline |
Constructor from a floating point.
[in] | value | Floating value to represent. |
Definition at line 94 of file int64x64-cairo.h.
References _v.
|
inline |
Constructor from a floating point.
[in] | value | Floating value to represent. |
Definition at line 99 of file int64x64-cairo.h.
References _cairo_int128_negate, _v, and HP_MAX_64.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent |
Definition at line 138 of file int64x64-cairo.h.
References _v.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 143 of file int64x64-cairo.h.
References _v.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 148 of file int64x64-cairo.h.
References _v.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 153 of file int64x64-cairo.h.
References _v.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 158 of file int64x64-cairo.h.
References _v.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 163 of file int64x64-cairo.h.
References _v.
|
inlineexplicit |
Construct from explicit high and low values.
[in] | hi | Integer portion. |
[in] | lo | Fractional portion, already scaled to HP_MAX_64. |
Definition at line 175 of file int64x64-cairo.h.
References _v.
|
inline |
|
inline |
Default constructor.
Definition at line 79 of file int64x64-double.h.
|
inline |
Constructor from a floating point.
[in] | value | Floating value to represent. |
Definition at line 91 of file int64x64-double.h.
|
inline |
Constructor from a floating point.
[in] | value | Floating value to represent. |
Definition at line 94 of file int64x64-double.h.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent |
Definition at line 108 of file int64x64-double.h.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 111 of file int64x64-double.h.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 114 of file int64x64-double.h.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 117 of file int64x64-double.h.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 120 of file int64x64-double.h.
|
inline |
Construct from an integral type.
[in] | v | Integer value to represent. |
Definition at line 123 of file int64x64-double.h.
|
inlineexplicit |
Construct from explicit high and low values.
[in] | hi | Integer portion. |
[in] | lo | Fractional portion, already scaled to HP_MAX_64. |
Definition at line 133 of file int64x64-double.h.
|
inline |
|
private |
Implement /=
.
[in] | o | The divisor. |
Definition at line 113 of file int64x64-128.cc.
References _v, ns3::output_sign(), test-ns3::result, and Udiv().
|
private |
Implement /=
.
[in] | o | The divisor. |
|
inline |
Get this value as a double.
Definition at line 231 of file int64x64-128.h.
References _v, HP_MASK_LO, and HP_MAX_64.
Referenced by ns3::int64x64::test::Int64x64Bug455TestCase::DoRun(), ns3::int64x64::test::Int64x64Bug863TestCase::DoRun(), ns3::ShowProgress::GiveFeedback(), and ns3::Time::ToDouble().
|
inline |
Get this value as a double.
Definition at line 212 of file int64x64-cairo.h.
References _cairo_int128_negate, _cairo_int128_negative, _v, and HP_MAX_64.
|
inline |
Get this value as a double.
Definition at line 175 of file int64x64-double.h.
References _v.
|
inline |
Get the integer portion.
Definition at line 247 of file int64x64-128.h.
References _v.
Referenced by ns3::OnOffApplication::CancelEvents(), anonymous_namespace{sample-show-progress.cc}::Hold::Event(), Invert(), and ns3::operator<<().
|
inline |
Get the integer portion.
Definition at line 228 of file int64x64-cairo.h.
References _v.
|
inline |
Get the integer portion.
Definition at line 228 of file int64x64-double.h.
References GetHighLow().
|
inlineprivate |
|
inline |
Truncate to an integer.
Truncation is always toward zero,
Definition at line 268 of file int64x64-128.h.
References _v.
|
inline |
Truncate to an integer.
Truncation is always toward zero,
Definition at line 247 of file int64x64-cairo.h.
References _cairo_int128_negate, _cairo_int128_negative, and _v.
|
inline |
Truncate to an integer.
Truncation is always toward zero,
Definition at line 247 of file int64x64-double.h.
References _v.
|
inline |
Get the fractional portion of this value, unscaled.
Definition at line 257 of file int64x64-128.h.
References _v, and HP_MASK_LO.
Referenced by ns3::operator<<(), and ns3::ReadLoDigits().
|
inline |
Get the fractional portion of this value, unscaled.
Definition at line 237 of file int64x64-cairo.h.
References _v.
|
inline |
Get the fractional portion of this value, unscaled.
Definition at line 237 of file int64x64-double.h.
References GetHighLow().
|
static |
Compute the inverse of an integer value.
Ordinary division by an integer would be limited to 64 bits of precision. Instead, we multiply by the 128-bit inverse of the divisor. This function computes the inverse to 128-bit precision. MulByInvert() then completes the division.
(Really this should be a separate type representing Q0.128.)
[in] | v | The value to compute the inverse of. |
Definition at line 217 of file int64x64-128.cc.
References int64x64_t(), GetHigh(), MulByInvert(), NS_ASSERT, test-ns3::result, and Udiv().
Referenced by ns3::int64x64::test::Int64x64InvertTestCase::Check(), and ns3::Time::SetResolution().
|
static |
Compute the inverse of an integer value.
Ordinary division by an integer would be limited to 64 bits of precsion. Instead, we multiply by the 128-bit inverse of the divisor. This function computes the inverse to 128-bit precision. MulByInvert() then completes the division.
(Really this should be a separate type representing Q0.128.)
[in] | v | The value to compute the inverse of. |
|
inlinestatic |
Compute the inverse of an integer value.
[in] | v | The value to compute the inverse of. |
Definition at line 285 of file int64x64-double.h.
|
private |
Implement *=
.
[in] | o | The other factor. |
Definition at line 64 of file int64x64-128.cc.
References _v, ns3::output_sign(), test-ns3::result, and Umul().
|
private |
Implement *=
.
[in] | o | The other factor. |
void ns3::int64x64_t::MulByInvert | ( | const int64x64_t & | o | ) |
Multiply this value by a Q0.128 value, presumably representing an inverse, completing a division operation.
[in] | o | The inverse operand. |
Definition at line 191 of file int64x64-128.cc.
References _v, test-ns3::result, and UmulByInvert().
Referenced by ns3::int64x64::test::Int64x64InvertTestCase::Check(), ns3::Time::From(), Invert(), and ns3::Time::To().
void ns3::int64x64_t::MulByInvert | ( | const int64x64_t & | o | ) |
Multiply this value by a Q0.128 value, presumably representing an inverse, completing a division operation.
[in] | o | The inverse operand. |
|
inline |
Multiply this value by a Q0.128 value, presumably representing an inverse, completing a division operation.
[in] | o | The inverse operand. |
Definition at line 274 of file int64x64-double.h.
References _v.
|
inlineexplicit |
|
inlineexplicit |
|
inlineexplicit |
|
inline |
Assignment.
[in] | o | Value to assign to this int64x64_t. |
Definition at line 214 of file int64x64-128.h.
References _v.
|
inline |
Assignment.
[in] | o | Value to assign to this int64x64_t. |
Definition at line 195 of file int64x64-cairo.h.
References _v.
|
inline |
Assignment.
[in] | o | Value to assign to this int64x64_t. |
Definition at line 158 of file int64x64-double.h.
References _v.
|
inline |
Round to the nearest int.
Similar to std::round this rounds halfway cases away from zero, regardless of the current (floating) rounding mode.
Definition at line 283 of file int64x64-128.h.
References _v.
|
inline |
Round to the nearest int.
Similar to std::round this rounds halfway cases away from zero, regardless of the current (floating) rounding mode.
Definition at line 262 of file int64x64-cairo.h.
References _cairo_int128_negate, _cairo_int128_negative, _cairo_uint128_add(), and _v.
|
inline |
Round to the nearest int.
Similar to std::round this rounds halfway cases away from zero, regardless of the current (floating) rounding mode.
Definition at line 259 of file int64x64-double.h.
References _v.
|
staticprivate |
Unsigned division of Q64.64 values.
[in] | a | Numerator. |
[in] | b | Denominator. |
a / b
Definition at line 128 of file int64x64-cairo.cc.
References _cairo_int128_lsl, _cairo_uint128_add(), _cairo_uint128_divrem(), _cairo_uint128_eq(), _cairo_uint128_lsl(), _cairo_uint128_lt(), _cairo_uint128_rsl(), _cairo_uint32_to_uint128(), HPCAIRO_MASK_HI_BIT, NS_ASSERT_MSG, cairo_uquorem128_t::quo, cairo_uquorem128_t::rem, and test-ns3::result.
Unsigned division of Q64.64 values.
[in] | a | Numerator. |
[in] | b | Denominator. |
a / b
. Definition at line 122 of file int64x64-128.cc.
References HP128_MASK_HI_BIT, NS_ASSERT_MSG, and test-ns3::result.
Referenced by Div(), and Invert().
|
staticprivate |
Unsigned multiplication of Q64.64 values.
Mathematically this should produce a Q128.128 value; we keep the central 128 bits, representing the Q64.64 result. We assert on integer overflow beyond the 64-bit integer portion.
[in] | a | First factor. |
[in] | b | Second factor. |
It might be tempting to just use a *
b and be done with it, but it's not that simple. With a and b as 128-bit integers, a *
b mathematically produces a 256-bit result, which the computer truncates to the lowest 128 bits. In our case, where a and b are interpreted as Q64.64 fixed point numbers, the multiplication mathematically produces a Q128.128 fixed point number. We want the middle 128 bits from the result, truncating both the high and low 64 bits. To achieve this, we carry out the multiplication explicitly with 64-bit operands and 128-bit intermediate results.
Definition at line 83 of file int64x64-cairo.cc.
References _cairo_uint128_add(), _cairo_uint128_lsl(), _cairo_uint64_to_uint128(), _cairo_uint64x64_128_mul(), NS_ABORT_MSG_IF, and test-ns3::result.
Unsigned multiplication of Q64.64 values.
Mathematically this should produce a Q128.128 value; we keep the central 128 bits, representing the Q64.64 result. We assert on integer overflow beyond the 64-bit integer portion.
[in] | a | First factor. |
[in] | b | Second factor. |
It might be tempting to just use a *
b and be done with it, but it's not that simple. With a and b as 128-bit integers, a *
b mathematically produces a 256-bit result, which the computer truncates to the lowest 128 bits. In our case, where a and b are interpreted as Q64.64 fixed point numbers, the multiplication mathematically produces a Q128.128 fixed point number. We want the middle 128 bits from the result, truncating both the high and low 64 bits. To achieve this, we carry out the multiplication explicitly with 64-bit operands and 128-bit intermediate results.
Definition at line 73 of file int64x64-128.cc.
References HP_MASK_HI, HP_MASK_LO, NS_ABORT_MSG_IF, and test-ns3::result.
Referenced by Mul().
|
staticprivate |
Unsigned multiplication of Q64.64 and Q0.128 values.
[in] | a | The numerator, a Q64.64 value. |
[in] | b | The inverse of the denominator, a Q0.128 value |
a * b
, representing the ration a / b^-1
Definition at line 204 of file int64x64-cairo.cc.
References _cairo_uint128_add(), _cairo_uint64x64_128_mul(), and test-ns3::result.
Unsigned multiplication of Q64.64 and Q0.128 values.
[in] | a | The numerator, a Q64.64 value. |
[in] | b | The inverse of the denominator, a Q0.128 value |
a * b
, representing the ration a / b^-1
.Definition at line 201 of file int64x64-128.cc.
References HP_MASK_LO, and test-ns3::result.
Referenced by MulByInvert().
|
friend |
Unary operator.
[in] | lhs | Left hand argument |
Definition at line 372 of file int64x64-128.h.
|
friend |
Unary operator.
[in] | lhs | Left hand argument |
Definition at line 356 of file int64x64-cairo.h.
|
friend |
Unary operator.
[in] | lhs | Left hand argument |
Definition at line 344 of file int64x64-double.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 347 of file int64x64-128.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 326 of file int64x64-cairo.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 319 of file int64x64-double.h.
|
friend |
Unary operator.
[in] | lhs | Left hand argument |
Definition at line 370 of file int64x64-128.h.
|
friend |
Unary operator.
[in] | lhs | Left hand argument |
Definition at line 349 of file int64x64-cairo.h.
|
friend |
Unary operator.
[in] | lhs | Left hand argument |
Definition at line 342 of file int64x64-double.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 337 of file int64x64-128.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 316 of file int64x64-cairo.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 309 of file int64x64-double.h.
|
friend |
Unary operator.
[in] | lhs | Left hand argument |
Definition at line 371 of file int64x64-128.h.
|
friend |
Unary operator.
[in] | lhs | Left hand argument |
Definition at line 350 of file int64x64-cairo.h.
|
friend |
Unary operator.
[in] | lhs | Left hand argument |
Definition at line 343 of file int64x64-double.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 342 of file int64x64-128.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 321 of file int64x64-cairo.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 314 of file int64x64-double.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 352 of file int64x64-128.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 331 of file int64x64-cairo.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 324 of file int64x64-double.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 334 of file int64x64-128.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 313 of file int64x64-cairo.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 306 of file int64x64-double.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 333 of file int64x64-128.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 312 of file int64x64-cairo.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 305 of file int64x64-double.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 335 of file int64x64-128.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 314 of file int64x64-cairo.h.
|
friend |
Arithmetic operator.
[in] | lhs | Left hand argument |
[in] | rhs | Right hand argument |
Definition at line 307 of file int64x64-double.h.
|
private |
The Q64.64 value.
Definition at line 431 of file int64x64-128.h.
Referenced by int64x64_t(), Div(), GetDouble(), GetHigh(), GetHighLow(), GetInt(), GetLow(), Mul(), MulByInvert(), operator bool(), operator=(), and Round().
|
private |
The Q64.64 value.
Definition at line 418 of file int64x64-cairo.h.
|
private |
The Q64.64 value.
Definition at line 347 of file int64x64-double.h.
|
staticprivate |
|
staticprivate |
Mask for fraction part.
Definition at line 60 of file int64x64-128.h.
Referenced by GetDouble(), GetLow(), Umul(), and UmulByInvert().
|
staticprivate |
|
static |
Type tag for this implementation.
Definition at line 62 of file int64x64-128.h.
Referenced by ns3::int64x64::test::Int64x64InvertTestCase::Check(), ns3::int64x64::test::Int64x64HiLoTestCase::Check(), ns3::int64x64::test::Int64x64DoubleTestCase::Check(), ns3::int64x64::test::Int64x64HiLoTestCase::DoRun(), ns3::int64x64::test::Int64x64InputTestCase::DoRun(), ns3::int64x64::test::Int64x64InputOutputTestCase::DoRun(), ns3::int64x64::test::Int64x64Bug1786TestCase::DoRun(), and ns3::int64x64::test::Int64x64ImplTestCase::DoRun().