LLVM: llvm::detail::IEEEFloat Class Reference (original) (raw)
#include "[llvm/ADT/APFloat.h](APFloat%5F8h%5Fsource.html)"
| Public Member Functions | |
|---|---|
| bool | needsCleanup () const |
| Returns whether this instance allocated memory. | |
| bool | operator== (const IEEEFloat &) const =delete |
| The definition of equality is not straightforward for floating point, so we won't use operator==. | |
| LLVM_ABI cmpResult | compare (const IEEEFloat &) const |
| IEEE comparison with another floating point number (NaNs compare unordered, 0==-0). | |
| LLVM_ABI bool | bitwiseIsEqual (const IEEEFloat &) const |
| Bitwise comparison for equality (QNaNs compare equal, 0!=-0). | |
| LLVM_ABI unsigned int | convertToHexString (char *dst, unsigned int hexDigits, bool upperCase, roundingMode) const |
| Write out a hexadecimal representation of the floating point value to DST, which must be of sufficient size, in the C99 form [-]0xh.hhhhp[+-]d. | |
| LLVM_ABI IEEEFloat & | operator= (const IEEEFloat &) |
| LLVM_ABI IEEEFloat & | operator= (IEEEFloat &&) |
| LLVM_ABI void | toString (SmallVectorImpl< char > &Str, unsigned FormatPrecision=0, unsigned FormatMaxPadding=3, bool TruncateZero=true) const |
| Converts this value into a decimal string. | |
| LLVM_ABI LLVM_READONLY int | getExactLog2Abs () const |
| LLVM_ABI cmpResult | compareAbsoluteValue (const IEEEFloat &) const |
| Constructors | |
| LLVM_ABI | IEEEFloat (const fltSemantics &) |
| LLVM_ABI | IEEEFloat (const fltSemantics &, integerPart) |
| LLVM_ABI | IEEEFloat (const fltSemantics &, uninitializedTag) |
| LLVM_ABI | IEEEFloat (const fltSemantics &, const APInt &) |
| LLVM_ABI | IEEEFloat (double d) |
| LLVM_ABI | IEEEFloat (float f) |
| LLVM_ABI | IEEEFloat (const IEEEFloat &) |
| LLVM_ABI | IEEEFloat (IEEEFloat &&) |
| LLVM_ABI | ~IEEEFloat () |
| Arithmetic | |
| LLVM_ABI opStatus | add (const IEEEFloat &, roundingMode) |
| LLVM_ABI opStatus | subtract (const IEEEFloat &, roundingMode) |
| LLVM_ABI opStatus | multiply (const IEEEFloat &, roundingMode) |
| LLVM_ABI opStatus | divide (const IEEEFloat &, roundingMode) |
| LLVM_ABI opStatus | remainder (const IEEEFloat &) |
| IEEE remainder. | |
| LLVM_ABI opStatus | mod (const IEEEFloat &) |
| C fmod, or llvm frem. | |
| LLVM_ABI opStatus | fusedMultiplyAdd (const IEEEFloat &, const IEEEFloat &, roundingMode) |
| LLVM_ABI opStatus | roundToIntegral (roundingMode) |
| LLVM_ABI opStatus | next (bool nextDown) |
| IEEE-754R 5.3.1: nextUp/nextDown. | |
| Sign operations. | |
| LLVM_ABI void | changeSign () |
| Conversions | |
| LLVM_ABI opStatus | convert (const fltSemantics &, roundingMode, bool *) |
| IEEEFloat::convert - convert a value of one floating point type to another. | |
| LLVM_ABI opStatus | convertToInteger (MutableArrayRef< integerPart >, unsigned int, bool, roundingMode, bool *) const |
| LLVM_ABI opStatus | convertFromAPInt (const APInt &, bool, roundingMode) |
| LLVM_ABI Expected< opStatus > | convertFromString (StringRef, roundingMode) |
| LLVM_ABI APInt | bitcastToAPInt () const |
| LLVM_ABI double | convertToDouble () const |
| LLVM_ABI float | convertToFloat () const |
| IEEE-754R 5.7.2 General operations. | |
| bool | isNegative () const |
| IEEE-754R isSignMinus: Returns true if and only if the current value is negative. | |
| bool | isNormal () const |
| IEEE-754R isNormal: Returns true if and only if the current value is normal. | |
| bool | isFinite () const |
| Returns true if and only if the current value is zero, subnormal, or normal. | |
| bool | isZero () const |
| Returns true if and only if the float is plus or minus zero. | |
| LLVM_ABI bool | isDenormal () const |
| IEEE-754R isSubnormal(): Returns true if and only if the float is a denormal. | |
| bool | isInfinity () const |
| IEEE-754R isInfinite(): Returns true if and only if the float is infinity. | |
| bool | isNaN () const |
| Returns true if and only if the float is a quiet or signaling NaN. | |
| LLVM_ABI bool | isSignaling () const |
| Returns true if and only if the float is a signaling NaN. | |
| Special value setters. | |
| LLVM_ABI void | makeLargest (bool Neg=false) |
| Make this number the largest magnitude normal number in the given semantics. | |
| LLVM_ABI void | makeSmallest (bool Neg=false) |
| Make this number the smallest magnitude denormal number in the given semantics. | |
| LLVM_ABI void | makeNaN (bool SNaN=false, bool Neg=false, const APInt *fill=nullptr) |
| LLVM_ABI void | makeInf (bool Neg=false) |
| LLVM_ABI void | makeZero (bool Neg=false) |
| LLVM_ABI void | makeQuiet () |
| LLVM_ABI void | makeSmallestNormalized (bool Negative=false) |
| Returns the smallest (by magnitude) normalized finite number in the given semantics. |
| Friends | |
|---|---|
| class | IEEEFloatUnitTestHelper |
| LLVM_ABI friend hash_code | hash_value (const IEEEFloat &Arg) |
| Overload to compute a hash code for an APFloat value. | |
| LLVM_ABI friend int | ilogb (const IEEEFloat &Arg) |
| LLVM_ABI friend IEEEFloat | scalbn (IEEEFloat X, int Exp, roundingMode RoundingMode) |
| LLVM_ABI friend IEEEFloat | frexp (const IEEEFloat &X, int &Exp, roundingMode RM) |
| Simple Queries | |
|---|---|
| fltCategory | getCategory () const |
| const fltSemantics & | getSemantics () const |
| bool | isNonZero () const |
| bool | isFiniteNonZero () const |
| bool | isPosZero () const |
| bool | isNegZero () const |
| LLVM_ABI bool | isSmallest () const |
| Returns true if and only if the number has the smallest possible non-zero magnitude in the current semantics. | |
| LLVM_ABI bool | isSmallestNormalized () const |
| Returns true if this is the smallest (by magnitude) normalized finite number in the given semantics. | |
| LLVM_ABI bool | isLargest () const |
| Returns true if and only if the number has the largest possible finite magnitude in the current semantics. | |
| LLVM_ABI bool | isInteger () const |
| Returns true if and only if the number is an exact integer. |
Definition at line 445 of file APFloat.h.
Definition at line 1195 of file APFloat.cpp.
References llvm::fltSemantics::hasZero, makeSmallestNormalized(), and makeZero().
Referenced by add(), bitwiseIsEqual(), compare(), compareAbsoluteValue(), divide(), frexp, fusedMultiplyAdd(), hash_value, IEEEFloat(), IEEEFloat(), IEEEFloat(), IEEEFloat(), IEEEFloat(), IEEEFloat(), ilogb, isInteger(), mod(), multiply(), operator=(), operator=(), operator==(), remainder(), roundToIntegral(), scalbn, and subtract().
◆ IEEEFloat() [2/8]
◆ IEEEFloat() [3/8]
◆ IEEEFloat() [4/8]
◆ IEEEFloat() [5/8]
| llvm::detail::IEEEFloat::IEEEFloat ( double d) | explicit |
|---|
◆ IEEEFloat() [6/8]
| llvm::detail::IEEEFloat::IEEEFloat ( float f) | explicit |
|---|
◆ IEEEFloat() [7/8]
◆ IEEEFloat() [8/8]
| llvm::detail::IEEEFloat::IEEEFloat | ( | IEEEFloat && | rhs | ) |
|---|
◆ ~IEEEFloat()
| llvm::detail::IEEEFloat::~IEEEFloat | ( | ) |
|---|
◆ add()
◆ bitcastToAPInt()
| APInt llvm::detail::IEEEFloat::bitcastToAPInt | ( | ) | const |
|---|
◆ bitwiseIsEqual()
◆ changeSign()
| void llvm::detail::IEEEFloat::changeSign | ( | ) |
|---|
◆ compare()
IEEE comparison with another floating point number (NaNs compare unordered, 0==-0).
Definition at line 2483 of file APFloat.cpp.
References assert(), llvm::detail::cmpEqual, llvm::detail::cmpGreaterThan, llvm::detail::cmpLessThan, llvm::detail::cmpUnordered, compareAbsoluteValue(), llvm::detail::fcInfinity, llvm::detail::fcNaN, llvm::detail::fcNormal, llvm::detail::fcZero, IEEEFloat(), llvm_unreachable, and PackCategoriesIntoKey.
Referenced by compareAbsoluteValue(), isInteger(), and remainder().
◆ compareAbsoluteValue()
◆ convert()
IEEEFloat::convert - convert a value of one floating point type to another.
The return value corresponds to the IEEE754 exceptions. *losesInfo records whether the transformation lost information, i.e. whether converting the result back to the original type will produce the original value (this is almost the same as return value==fsOK, but there are edge cases where this is not so).
Definition at line 2560 of file APFloat.cpp.
References llvm::detail::fcInfinity, llvm::detail::fcNaN, llvm::detail::fcZero, isFiniteNonZero(), isSignaling(), llvm::lfExactlyZero, makeNaN(), makeQuiet(), makeSmallestNormalized(), llvm::fltSemantics::minExponent, llvm::fltSemantics::nanEncoding, llvm::NanOnly, llvm::NegativeZero, llvm::fltSemantics::nonFiniteBehavior, llvm::detail::opInexact, llvm::detail::opInvalidOp, llvm::detail::opOK, llvm::partCountForBits(), llvm::fltSemantics::precision, llvm::shiftRight(), llvm::APInt::tcAssign(), llvm::APInt::tcSet(), llvm::APInt::tcSetBit(), and llvm::APInt::tcShiftLeft().
Referenced by remainder().
◆ convertFromAPInt()
◆ convertFromString()
◆ convertToDouble()
| double llvm::detail::IEEEFloat::convertToDouble | ( | ) | const |
|---|
◆ convertToFloat()
| float llvm::detail::IEEEFloat::convertToFloat | ( | ) | const |
|---|
◆ convertToHexString()
Write out a hexadecimal representation of the floating point value to DST, which must be of sufficient size, in the C99 form [-]0xh.hhhhp[+-]d.
Return the number of characters written, excluding the terminating NUL.
Definition at line 3323 of file APFloat.cpp.
References llvm::detail::fcInfinity, llvm::detail::fcNaN, llvm::detail::fcNormal, llvm::detail::fcZero, llvm::infinityL, llvm::infinityU, llvm::NaNL, and llvm::NaNU.
◆ convertToInteger()
◆ divide()
◆ fusedMultiplyAdd()
◆ getCategory()
| fltCategory llvm::detail::IEEEFloat::getCategory ( ) const | inline |
|---|
◆ getExactLog2Abs()
| int llvm::detail::IEEEFloat::getExactLog2Abs | ( | ) | const |
|---|
◆ getSemantics()
◆ isDenormal()
| bool llvm::detail::IEEEFloat::isDenormal | ( | ) | const |
|---|
◆ isFinite()
| bool llvm::detail::IEEEFloat::isFinite ( ) const | inline |
|---|
◆ isFiniteNonZero()
| bool llvm::detail::IEEEFloat::isFiniteNonZero ( ) const | inline |
|---|
Definition at line 576 of file APFloat.h.
References isFinite(), and isZero().
Referenced by bitwiseIsEqual(), compareAbsoluteValue(), convert(), divide(), fusedMultiplyAdd(), hash_value, isDenormal(), isLargest(), isNormal(), isSmallest(), mod(), and multiply().
◆ isInfinity()
| bool llvm::detail::IEEEFloat::isInfinity ( ) const | inline |
|---|
◆ isInteger()
| bool llvm::detail::IEEEFloat::isInteger | ( | ) | const |
|---|
◆ isLargest()
| bool llvm::detail::IEEEFloat::isLargest | ( | ) | const |
|---|
◆ isNaN()
| bool llvm::detail::IEEEFloat::isNaN ( ) const | inline |
|---|
◆ isNegative()
| bool llvm::detail::IEEEFloat::isNegative ( ) const | inline |
|---|
◆ isNegZero()
| bool llvm::detail::IEEEFloat::isNegZero ( ) const | inline |
|---|
◆ isNonZero()
| bool llvm::detail::IEEEFloat::isNonZero ( ) const | inline |
|---|
◆ isNormal()
| bool llvm::detail::IEEEFloat::isNormal ( ) const | inline |
|---|
IEEE-754R isNormal: Returns true if and only if the current value is normal.
This implies that the current value of the float is not zero, subnormal, infinite, or NaN following the definition of normality from IEEE-754R.
Definition at line 544 of file APFloat.h.
References isDenormal(), and isFiniteNonZero().
◆ isPosZero()
| bool llvm::detail::IEEEFloat::isPosZero ( ) const | inline |
|---|
◆ isSignaling()
| bool llvm::detail::IEEEFloat::isSignaling | ( | ) | const |
|---|
◆ isSmallest()
| bool llvm::detail::IEEEFloat::isSmallest | ( | ) | const |
|---|
Returns true if and only if the number has the smallest possible non-zero magnitude in the current semantics.
Definition at line 1033 of file APFloat.cpp.
References isFiniteNonZero().
Referenced by next().
◆ isSmallestNormalized()
| bool llvm::detail::IEEEFloat::isSmallestNormalized | ( | ) | const |
|---|
◆ isZero()
| bool llvm::detail::IEEEFloat::isZero ( ) const | inline |
|---|
◆ makeInf()
| void llvm::detail::IEEEFloat::makeInf | ( | bool | Neg = false | ) |
|---|
◆ makeLargest()
| void llvm::detail::IEEEFloat::makeLargest | ( | bool | Neg = false | ) |
|---|
◆ makeNaN()
| void llvm::detail::IEEEFloat::makeNaN | ( | bool | SNaN = false, |
|---|---|---|---|
| bool | Neg = false, | ||
| const APInt * | fill = nullptr ) |
Definition at line 930 of file APFloat.cpp.
References llvm::detail::fcNaN, llvm::fill(), llvm::FiniteOnly, llvm::APInt::getAllOnes(), llvm::APInt::getZero(), llvm_unreachable, llvm::NanOnly, llvm::NegativeZero, llvm::APInt::tcAssign(), llvm::APInt::tcClearBit(), llvm::APInt::tcIsZero(), llvm::APInt::tcSet(), and llvm::APInt::tcSetBit().
Referenced by convert(), makeInf(), and next().
◆ makeQuiet()
| void llvm::detail::IEEEFloat::makeQuiet | ( | ) |
|---|
◆ makeSmallest()
| void llvm::detail::IEEEFloat::makeSmallest | ( | bool | Neg = false | ) |
|---|
◆ makeSmallestNormalized()
| void llvm::detail::IEEEFloat::makeSmallestNormalized | ( | bool | Negative = false | ) |
|---|
◆ makeZero()
| void llvm::detail::IEEEFloat::makeZero | ( | bool | Neg = false | ) |
|---|
◆ mod()
C fmod, or llvm frem.
Definition at line 2312 of file APFloat.cpp.
References assert(), llvm::detail::cmpLessThan, compareAbsoluteValue(), IEEEFloat(), ilogb, isFiniteNonZero(), isZero(), llvm::NegativeZero, llvm::detail::opOK, llvm::detail::rmNearestTiesToEven, scalbn, and subtract().
Referenced by remainder().
◆ multiply()
◆ needsCleanup()
| bool llvm::detail::IEEEFloat::needsCleanup ( ) const | inline |
|---|
Returns whether this instance allocated memory.
Definition at line 463 of file APFloat.h.
◆ next()
IEEE-754R 5.3.1: nextUp/nextDown.
IEEE-754R 2008 5.3.1: nextUp/nextDown.
NOTE since nextDown(x) = -nextUp(-x), we only implement nextUp with appropriate sign switching before/after the computation.
Definition at line 4549 of file APFloat.cpp.
References assert(), changeSign(), llvm::detail::fcInfinity, llvm::detail::fcNaN, llvm::detail::fcNormal, llvm::detail::fcZero, llvm::FiniteOnly, llvm::APFloat::hasSignificand(), isDenormal(), isLargest(), isNegative(), isSignaling(), isSmallest(), makeLargest(), makeNaN(), makeSmallest(), makeSmallestNormalized(), llvm::NanOnly, llvm::NegativeZero, next(), llvm::detail::opInvalidOp, llvm::detail::opOK, llvm::APInt::tcDecrement(), llvm::APInt::tcSet(), and llvm::APInt::tcSetBit().
Referenced by next().
◆ operator=() [1/2]
◆ operator=() [2/2]
◆ operator==()
The definition of equality is not straightforward for floating point, so we won't use operator==.
Use one of the following, or write whatever it is you really mean.
References IEEEFloat(), and LLVM_ABI.
◆ remainder()
IEEE remainder.
Definition at line 2202 of file APFloat.cpp.
References add(), assert(), llvm::detail::cmpEqual, llvm::detail::cmpGreaterThan, compare(), convert(), IEEEFloat(), isZero(), llvm::fltSemantics::maxExponent, llvm::fltSemantics::minExponent, mod(), llvm::NegativeZero, llvm::detail::opDivByZero, llvm::detail::opOK, P, llvm::fltSemantics::precision, llvm::detail::rmNearestTiesToEven, and subtract().
◆ roundToIntegral()
Definition at line 2396 of file APFloat.cpp.
References add(), assert(), changeSign(), convertFromAPInt(), IEEEFloat(), isInfinity(), isNaN(), isNegative(), isSignaling(), isZero(), makeQuiet(), llvm::NextPowerOf2(), llvm::detail::opInvalidOp, llvm::detail::opOK, llvm::detail::rmNearestTiesToEven, llvm::APFloatBase::semanticsPrecision(), and subtract().
◆ subtract()
◆ toString()
Converts this value into a decimal string.
Parameters
| FormatPrecision | The maximum number of digits of precision to output. If there are fewer digits available, zero padding will not be used unless the value is integral and small enough to be expressed in FormatPrecision digits. 0 means to use the natural precision of the number. |
|---|---|
| FormatMaxPadding | The maximum number of zeros to consider inserting before falling back to scientific notation. 0 means to always use scientific notation. |
| TruncateZero | Indicate whether to remove the trailing zero in fraction part or not. Also setting this parameter to false forcing producing of output more similar to default printf behavior. Specifically the lower e is used as exponent delimiter and exponent always contains no less than two digits. |
Number Precision MaxPadding Result
1.01E+4 5 2 10100 1.01E+4 4 2 1.01E+4 1.01E+4 5 1 1.01E+4 1.01E-2 5 2 0.0101 1.01E-2 4 2 0.0101 1.01E-2 4 1 1.01E-2
Definition at line 4460 of file APFloat.cpp.
References llvm::detail::fcInfinity, llvm::detail::fcNaN, llvm::detail::fcNormal, llvm::detail::fcZero, isNegative(), llvm::partCountForBits(), and toString().
Referenced by toString().
◆ frexp
◆ hash_value
Overload to compute a hash code for an APFloat value.
Note that the use of hash codes for floating point values is in general frought with peril. Equality is hard to define for these values. For example, should negative and positive zero hash to different codes? Are they equal or not? This hash value implementation specifically emphasizes producing different codes for different inputs in order to be used in canonicalization and memoization. As such, equality is bitwiseIsEqual, and 0 != -0.
Definition at line 3471 of file APFloat.cpp.
References llvm::hash_combine(), llvm::hash_combine_range(), IEEEFloat(), isFiniteNonZero(), isNaN(), and llvm::fltSemantics::precision.
◆ IEEEFloatUnitTestHelper
| friend class IEEEFloatUnitTestHelper | friend |
|---|
◆ ilogb
Definition at line 4729 of file APFloat.cpp.
References getSemantics(), IEEEFloat(), llvm::APFloatBase::IEK_Inf, llvm::APFloatBase::IEK_NaN, llvm::APFloatBase::IEK_Zero, isDenormal(), isInfinity(), isNaN(), isZero(), llvm::lfExactlyZero, llvm::fltSemantics::precision, and llvm::APFloatBase::rmNearestTiesToEven.
Referenced by mod().
◆ scalbn
The documentation for this class was generated from the following files:
- include/llvm/ADT/APFloat.h
- lib/Support/APFloat.cpp