TSDuck v3.40-4033
MPEG Transport Stream Toolkit
|
Encapsulation of a double floating-point as an AbstractNumber. More...
#include <tsFloatingPoint.h>
Public Types | |
using | float_t = FLOAT_T |
The underlying floating-point type. | |
using | int_t = int64_t |
An integer type for conversion to integral values. | |
Public Member Functions | |
FloatingPoint ()=default | |
Default constructor, implicitly initialized to zero. | |
template<typename NUM_T > requires std::is_arithmetic_v<NUM_T> | |
FloatingPoint (NUM_T x) | |
Constructor from an integer or floating-point value. | |
FloatingPoint | abs () const |
Get the absolute value. | |
virtual ts::UString | description () const override |
Get a textual description of the values of that type. | |
bool | divOverflow (const FloatingPoint &x) const |
Check if this FloatingPoint number generates an overflow when divided by another FloatingPoint. | |
virtual bool | fromString (const UString &str, UChar separator=COMMA, UChar decimal_dot=FULL_STOP) override |
Parse a string and interpret it as a number. | |
virtual bool | inRange (int64_t min, int64_t max) const override |
Check if the value of the number is within a range of integer value. | |
FloatingPoint | max (const FloatingPoint &x) const |
Get the maximum value of two fractions. | |
FloatingPoint | min (const FloatingPoint &x) const |
Get the minimum value of two fractions. | |
bool | mulOverflow (const FloatingPoint &x) const |
Check if this FloatingPoint number generates an overflow when multiplied by another FloatingPoint. | |
template<typename INT2 > requires std::integral<INT2> | |
bool | mulOverflow (INT2 x) const |
Check if this FloatingPoint number generates an overflow when multiplied by an integer. | |
virtual double | toDouble () const override |
Conversion to double value. | |
int_t | toInt () const |
Conversion to integral value. | |
virtual int64_t | toInt64 () const override |
Conversion to a 64-bit signed integer value. | |
virtual UString | toString (size_t min_width=0, bool right_justified=true, UChar separator=COMMA, bool force_sign=false, size_t decimals=NPOS, bool force_decimals=false, UChar decimal_dot=FULL_STOP, UChar pad=SPACE) const override |
Convert the number to a string object. | |
Static Public Attributes | |
static constexpr size_t | DISPLAY_PRECISION = PREC |
The displayed precision of the floating-point type (number of decimal digits). | |
static constexpr float_t | EQUAL_PRECISION = 100.0 * std::numeric_limits<float_t>::min() |
Precision of "equal" comparisons. | |
static const AbstractNumber *const | INVALID |
Pointer to an invalid instance of AbstractNumber. | |
static const FloatingPoint | MAX |
The maximum representable value of this fraction type. | |
static const FloatingPoint | MIN |
The minimum representable value of this fraction type. | |
Static Protected Member Functions | |
static void | Deformat (UString &str, UChar separator, UChar decimal_dot) |
Static common utility to deformat a string containing a number. | |
static void | Format (UString &str, size_t min_width, bool right_justified, UChar separator, bool add_plus_sign, size_t decimals, bool force_decimals, UChar decimal_dot, UChar pad) |
Static common utility to format a string containing a number with or without decimal part. | |
Encapsulation of a double floating-point as an AbstractNumber.
FLOAT_T | The underlying floating-point type. |
PREC | The number of decimal digits to display by default. This is a display attribute only, it does not alter the binary representation of floating-point values. The default is to display 6 digits. |
using ts::FloatingPoint< FLOAT_T, PREC >::int_t = int64_t |
An integer type for conversion to integral values.
Overflow may occur.
|
inline |
Constructor from an integer or floating-point value.
NUM_T | Some integer or floating-point type. |
[in] | x | Initial value. |
|
overridevirtual |
Get a textual description of the values of that type.
This is typically used in help texts.
Implements ts::AbstractNumber.
|
overridevirtual |
Check if the value of the number is within a range of integer value.
[in] | min | Minimum integer value (inclusive). |
[in] | max | Maximum integer value (inclusive). |
Implements ts::AbstractNumber.
|
overridevirtual |
Conversion to a 64-bit signed integer value.
Implements ts::AbstractNumber.
|
overridevirtual |
|
overridevirtual |
Parse a string and interpret it as a number.
The content of this object is updated from the parsed string.
[in] | str | A string to parse, representing this object. |
[in] | separator | Separator character for groups of thousands, a comma by default. |
[in] | decimal_dot | The decimal separator, a dot by default. |
Implements ts::AbstractNumber.
|
overridevirtual |
Convert the number to a string object.
[in] | min_width | Minimum width of the returned string. Padded with pad characters if larger than the number of characters in the formatted number. |
[in] | right_justified | If true (the default), return a right-justified string. When false, return a left-justified string. Ignored if min_width is lower than the number of characters in the formatted number. |
[in] | separator | Separator character for groups of thousands, a comma by default. CHAR_NULL means no separator. |
[in] | force_sign | If true, force a '+' sign for positive values. |
[in] | decimals | Precision to use after the decimal point. NPOS means default. |
[in] | force_decimals | If true, with positive precision, force a decimal dot and the number of decimal digits of the precision. By default, skip non significant decimal digits. |
[in] | decimal_dot | The decimal separator, a dot by default. |
[in] | pad | The padding character to adjust the width. |
Implements ts::AbstractNumber.
|
inline |
Conversion to integral value.
|
inline |
Get the absolute value.
|
inline |
Get the maximum value of two fractions.
[in] | x | Another fraction. |
|
inline |
Get the minimum value of two fractions.
[in] | x | Another fraction. |
|
inline |
Check if this FloatingPoint number generates an overflow when multiplied by an integer.
The method is present for compliance with other AbstractNumber subclasses.
INT2 | Another integer type. |
[in] | x | An integer of type INT2. |
|
inline |
Check if this FloatingPoint number generates an overflow when multiplied by another FloatingPoint.
The method is present for compliance with other AbstractNumber subclasses.
[in] | x | Another FloatingPoint number. |
|
inline |
Check if this FloatingPoint number generates an overflow when divided by another FloatingPoint.
The method is present for compliance with other AbstractNumber subclasses.
[in] | x | Another FloatingPoint. |
|
staticprotectedinherited |
Static common utility to format a string containing a number with or without decimal part.
[in,out] | str | String to format. |
[in] | min_width | Minimum width of the string. |
[in] | right_justified | If true (the default), return a right-justified string. |
[in] | separator | Separator character for groups of thousands. |
[in] | add_plus_sign | If true, force a '+' sign before the number. |
[in] | decimals | Precision to use after the decimal point. NPOS not allowed. |
[in] | force_decimals | If true, force a decimal dot and the number of decimal digits. For integer types, use force_decimals == true and decimals == 0. |
[in] | decimal_dot | The decimal separator. |
[in] | pad | The padding character to adjust the width. |
|
staticprotectedinherited |
Static common utility to deformat a string containing a number.
[in,out] | str | String to deformat. |
[in] | separator | Separator character for groups of thousands. |
[in] | decimal_dot | The decimal separator. |
|
staticconstexpr |
The displayed precision of the floating-point type (number of decimal digits).
This is a display attribute only, it does not alter the binary representation of floating-point values.
|
staticconstexpr |
Precision of "equal" comparisons.
We cannot test equality between floating point values. Because of rounding issues, it does not make sense. Instead we check if the absolute value of their difference is lower than some very small value, this precision.
|
staticinherited |
Pointer to an invalid instance of AbstractNumber.
Its toString() method always return an empty string.