LLVM  6.0.0svn
Classes | Public Member Functions | Friends | List of all members
llvm::detail::IEEEFloat Class Referencefinal

#include "llvm/ADT/APFloat.h"

Inheritance diagram for llvm::detail::IEEEFloat:
Inheritance graph
[legend]
Collaboration diagram for llvm::detail::IEEEFloat:
Collaboration graph
[legend]

Public Member Functions

bool needsCleanup () const
 Returns whether this instance allocated memory. More...
 
bool operator== (const IEEEFloat &) const =delete
 The definition of equality is not straightforward for floating point, so we won't use operator==. More...
 
cmpResult compare (const IEEEFloat &) const
 IEEE comparison with another floating point number (NaNs compare unordered, 0==-0). More...
 
bool bitwiseIsEqual (const IEEEFloat &) const
 Bitwise comparison for equality (QNaNs compare equal, 0!=-0). More...
 
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. More...
 
IEEEFloatoperator= (const IEEEFloat &)
 
IEEEFloatoperator= (IEEEFloat &&)
 
void toString (SmallVectorImpl< char > &Str, unsigned FormatPrecision=0, unsigned FormatMaxPadding=3, bool TruncateZero=true) const
 Converts this value into a decimal string. More...
 
bool getExactInverse (APFloat *inv) const
 If this value has an exact multiplicative inverse, store it in inv and return true. More...
 
cmpResult compareAbsoluteValue (const IEEEFloat &) const
 
Constructors
 IEEEFloat (const fltSemantics &)
 
 IEEEFloat (const fltSemantics &, integerPart)
 
 IEEEFloat (const fltSemantics &, uninitializedTag)
 
 IEEEFloat (const fltSemantics &, const APInt &)
 
 IEEEFloat (double d)
 
 IEEEFloat (float f)
 
 IEEEFloat (const IEEEFloat &)
 
 IEEEFloat (IEEEFloat &&)
 
 ~IEEEFloat ()
 
Arithmetic
opStatus add (const IEEEFloat &, roundingMode)
 
opStatus subtract (const IEEEFloat &, roundingMode)
 
opStatus multiply (const IEEEFloat &, roundingMode)
 
opStatus divide (const IEEEFloat &, roundingMode)
 
opStatus remainder (const IEEEFloat &)
 IEEE remainder. More...
 
opStatus mod (const IEEEFloat &)
 C fmod, or llvm frem. More...
 
opStatus fusedMultiplyAdd (const IEEEFloat &, const IEEEFloat &, roundingMode)
 
opStatus roundToIntegral (roundingMode)
 
opStatus next (bool nextDown)
 IEEE-754R 5.3.1: nextUp/nextDown. More...
 
Sign operations.
void changeSign ()
 
Conversions
opStatus convert (const fltSemantics &, roundingMode, bool *)
 IEEEFloat::convert - convert a value of one floating point type to another. More...
 
opStatus convertToInteger (MutableArrayRef< integerPart >, unsigned int, bool, roundingMode, bool *) const
 
opStatus convertFromAPInt (const APInt &, bool, roundingMode)
 
opStatus convertFromSignExtendedInteger (const integerPart *, unsigned int, bool, roundingMode)
 
opStatus convertFromZeroExtendedInteger (const integerPart *, unsigned int, bool, roundingMode)
 
opStatus convertFromString (StringRef, roundingMode)
 
APInt bitcastToAPInt () const
 
double convertToDouble () const
 
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. More...
 
bool isNormal () const
 IEEE-754R isNormal: Returns true if and only if the current value is normal. More...
 
bool isFinite () const
 Returns true if and only if the current value is zero, subnormal, or normal. More...
 
bool isZero () const
 Returns true if and only if the float is plus or minus zero. More...
 
bool isDenormal () const
 IEEE-754R isSubnormal(): Returns true if and only if the float is a denormal. More...
 
bool isInfinity () const
 IEEE-754R isInfinite(): Returns true if and only if the float is infinity. More...
 
bool isNaN () const
 Returns true if and only if the float is a quiet or signaling NaN. More...
 
bool isSignaling () const
 Returns true if and only if the float is a signaling NaN. More...
 
Special value setters.
void makeLargest (bool Neg=false)
 Make this number the largest magnitude normal number in the given semantics. More...
 
void makeSmallest (bool Neg=false)
 Make this number the smallest magnitude denormal number in the given semantics. More...
 
void makeNaN (bool SNaN=false, bool Neg=false, const APInt *fill=nullptr)
 
void makeInf (bool Neg=false)
 
void makeZero (bool Neg=false)
 
void makeQuiet ()
 
void makeSmallestNormalized (bool Negative=false)
 Returns the smallest (by magnitude) normalized finite number in the given semantics. More...
 

Friends

hash_code hash_value (const IEEEFloat &Arg)
 Overload to compute a hash code for an APFloat value. More...
 
int ilogb (const IEEEFloat &Arg)
 Returns the exponent of the internal representation of the APFloat. More...
 
IEEEFloat scalbn (IEEEFloat X, int Exp, roundingMode)
 Returns: X * 2^Exp for integral exponents. More...
 
IEEEFloat frexp (const IEEEFloat &X, int &Exp, roundingMode)
 

Simple Queries

fltCategory getCategory () const
 
const fltSemanticsgetSemantics () const
 
bool isNonZero () const
 
bool isFiniteNonZero () const
 
bool isPosZero () const
 
bool isNegZero () const
 
bool isSmallest () const
 Returns true if and only if the number has the smallest possible non-zero magnitude in the current semantics. More...
 
bool isLargest () const
 Returns true if and only if the number has the largest possible finite magnitude in the current semantics. More...
 
bool isInteger () const
 Returns true if and only if the number is an exact integer. More...
 

Additional Inherited Members

- Public Types inherited from llvm::APFloatBase
enum  cmpResult { cmpLessThan, cmpEqual, cmpGreaterThan, cmpUnordered }
 IEEE-754R 5.11: Floating Point Comparison Relations. More...
 
enum  roundingMode {
  rmNearestTiesToEven, rmTowardPositive, rmTowardNegative, rmTowardZero,
  rmNearestTiesToAway
}
 IEEE-754R 4.3: Rounding-direction attributes. More...
 
enum  opStatus {
  opOK = 0x00, opInvalidOp = 0x01, opDivByZero = 0x02, opOverflow = 0x04,
  opUnderflow = 0x08, opInexact = 0x10
}
 IEEE-754R 7: Default exception handling. More...
 
enum  fltCategory { fcInfinity, fcNaN, fcNormal, fcZero }
 Category of internally-represented number. More...
 
enum  uninitializedTag { uninitialized }
 Convenience enum used to construct an uninitialized APFloat. More...
 
enum  IlogbErrorKinds { IEK_Zero = INT_MIN + 1, IEK_NaN = INT_MIN, IEK_Inf = INT_MAX }
 Enumeration of ilogb error results. More...
 
typedef APInt::WordType integerPart
 
typedef signed short ExponentType
 A signed type to represent a floating point numbers unbiased exponent. More...
 
- Static Public Member Functions inherited from llvm::APFloatBase
static unsigned int semanticsPrecision (const fltSemantics &)
 
static ExponentType semanticsMinExponent (const fltSemantics &)
 
static ExponentType semanticsMaxExponent (const fltSemantics &)
 
static unsigned int semanticsSizeInBits (const fltSemantics &)
 
static unsigned getSizeInBits (const fltSemantics &Sem)
 Returns the size of the floating point number (in bits) in the given semantics. More...
 
static const fltSemanticsIEEEhalf () LLVM_READNONE
 
static const fltSemanticsIEEEsingle () LLVM_READNONE
 
static const fltSemanticsIEEEdouble () LLVM_READNONE
 
static const fltSemanticsIEEEquad () LLVM_READNONE
 
static const fltSemanticsPPCDoubleDouble () LLVM_READNONE
 
static const fltSemanticsx87DoubleExtended () LLVM_READNONE
 
static const fltSemanticsBogus () LLVM_READNONE
 A Pseudo fltsemantic used to construct APFloats that cannot conflict with anything real. More...
 
- Static Public Attributes inherited from llvm::APFloatBase
static const unsigned integerPartWidth = APInt::APINT_BITS_PER_WORD
 

Detailed Description

Definition at line 226 of file APFloat.h.

Constructor & Destructor Documentation

◆ IEEEFloat() [1/8]

llvm::detail::IEEEFloat::IEEEFloat ( const fltSemantics ourSemantics)

Definition at line 859 of file APFloat.cpp.

References initialize().

◆ IEEEFloat() [2/8]

llvm::detail::IEEEFloat::IEEEFloat ( const fltSemantics ourSemantics,
integerPart  value 
)

Definition at line 849 of file APFloat.cpp.

References initialize(), llvm::lfExactlyZero, and llvm::fltSemantics::precision.

◆ IEEEFloat() [3/8]

llvm::detail::IEEEFloat::IEEEFloat ( const fltSemantics ourSemantics,
uninitializedTag  tag 
)

Definition at line 867 of file APFloat.cpp.

◆ IEEEFloat() [4/8]

llvm::detail::IEEEFloat::IEEEFloat ( const fltSemantics Sem,
const APInt API 
)

Definition at line 3297 of file APFloat.cpp.

◆ IEEEFloat() [5/8]

llvm::detail::IEEEFloat::IEEEFloat ( double  d)
explicit

◆ IEEEFloat() [6/8]

llvm::detail::IEEEFloat::IEEEFloat ( float  f)
explicit

Definition at line 3301 of file APFloat.cpp.

References llvm::APInt::floatToBits().

◆ IEEEFloat() [7/8]

llvm::detail::IEEEFloat::IEEEFloat ( const IEEEFloat rhs)

Definition at line 870 of file APFloat.cpp.

◆ IEEEFloat() [8/8]

llvm::detail::IEEEFloat::IEEEFloat ( IEEEFloat &&  rhs)

Definition at line 875 of file APFloat.cpp.

◆ ~IEEEFloat()

llvm::detail::IEEEFloat::~IEEEFloat ( )

Member Function Documentation

◆ add()

IEEEFloat::opStatus llvm::detail::IEEEFloat::add ( const IEEEFloat rhs,
roundingMode  rounding_mode 
)

Definition at line 1658 of file APFloat.cpp.

Referenced by convertToDouble(), and roundToIntegral().

◆ bitcastToAPInt()

APInt llvm::detail::IEEEFloat::bitcastToAPInt ( ) const

Definition at line 2995 of file APFloat.cpp.

References assert().

Referenced by convertToDouble(), and convertToFloat().

◆ bitwiseIsEqual()

bool llvm::detail::IEEEFloat::bitwiseIsEqual ( const IEEEFloat rhs) const

Bitwise comparison for equality (QNaNs compare equal, 0!=-0).

Definition at line 832 of file APFloat.cpp.

References llvm::lltok::equal.

◆ changeSign()

void llvm::detail::IEEEFloat::changeSign ( )

◆ compare()

IEEEFloat::cmpResult llvm::detail::IEEEFloat::compare ( const IEEEFloat rhs) const

◆ compareAbsoluteValue()

IEEEFloat::cmpResult llvm::detail::IEEEFloat::compareAbsoluteValue ( const IEEEFloat rhs) const

◆ convert()

IEEEFloat::opStatus llvm::detail::IEEEFloat::convert ( const fltSemantics toSemantics,
roundingMode  rounding_mode,
bool losesInfo 
)

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 1927 of file APFloat.cpp.

References assert(), bits, llvm::MutableArrayRef< T >::data(), llvm::APFloatBase::fcInfinity, llvm::APFloatBase::fcNaN, llvm::APFloatBase::fcZero, isFiniteNonZero(), llvm::lfExactlyZero, llvm::lostFractionThroughTruncation(), llvm::fltSemantics::minExponent, llvm::APFloatBase::opInexact, llvm::APFloatBase::opInvalidOp, llvm::APFloatBase::opOK, llvm::partCountForBits(), llvm::fltSemantics::precision, llvm::shiftRight(), llvm::ArrayRef< T >::size(), llvm::APInt::tcAssign(), llvm::APInt::tcExtract(), llvm::APInt::tcIncrement(), llvm::APInt::tcLSB(), llvm::APInt::tcMSB(), llvm::APInt::tcNegate(), llvm::APInt::tcSet(), llvm::APInt::tcSetBit(), and llvm::APInt::tcShiftLeft().

Referenced by llvm::APFloat::convert(), convertToDouble(), llvm::detail::hash_value(), and ~IEEEFloat().

◆ convertFromAPInt()

IEEEFloat::opStatus llvm::detail::IEEEFloat::convertFromAPInt ( const APInt Val,
bool  isSigned,
roundingMode  rounding_mode 
)

◆ convertFromSignExtendedInteger()

IEEEFloat::opStatus llvm::detail::IEEEFloat::convertFromSignExtendedInteger ( const integerPart src,
unsigned int  srcCount,
bool  isSigned,
roundingMode  rounding_mode 
)

◆ convertFromString()

IEEEFloat::opStatus llvm::detail::IEEEFloat::convertFromString ( StringRef  str,
roundingMode  rounding_mode 
)

◆ convertFromZeroExtendedInteger()

IEEEFloat::opStatus llvm::detail::IEEEFloat::convertFromZeroExtendedInteger ( const integerPart parts,
unsigned int  width,
bool  isSigned,
roundingMode  rounding_mode 
)

◆ convertToDouble()

double llvm::detail::IEEEFloat::convertToDouble ( ) const

◆ convertToFloat()

float llvm::detail::IEEEFloat::convertToFloat ( ) const

Definition at line 3016 of file APFloat.cpp.

References assert(), bitcastToAPInt(), and llvm::APInt::bitsToFloat().

◆ convertToHexString()

unsigned int llvm::detail::IEEEFloat::convertToHexString ( char dst,
unsigned int  hexDigits,
bool  upperCase,
roundingMode  rounding_mode 
) 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.

Return the number of characters written, excluding the terminating NUL.

Definition at line 2623 of file APFloat.cpp.

References assert(), bits, llvm::count(), llvm::APFloatBase::fcInfinity, llvm::APFloatBase::fcNaN, llvm::APFloatBase::fcNormal, llvm::APFloatBase::fcZero, llvm::hexDigitsLower, llvm::hexDigitsUpper, llvm::hexDigitValue(), llvm::APFloatBase::integerPartWidth, llvm::lostFractionThroughTruncation(), llvm::partAsHex(), llvm::fltSemantics::precision, and llvm::writeSignedDecimal().

◆ convertToInteger()

IEEEFloat::opStatus llvm::detail::IEEEFloat::convertToInteger ( MutableArrayRef< integerPart parts,
unsigned int  width,
bool  isSigned,
roundingMode  rounding_mode,
bool isExact 
) const

◆ divide()

IEEEFloat::opStatus llvm::detail::IEEEFloat::divide ( const IEEEFloat rhs,
roundingMode  rounding_mode 
)

Definition at line 1688 of file APFloat.cpp.

References isFiniteNonZero(), llvm::lfExactlyZero, and llvm::APFloatBase::opInexact.

Referenced by getExactInverse(), and remainder().

◆ fusedMultiplyAdd()

IEEEFloat::opStatus llvm::detail::IEEEFloat::fusedMultiplyAdd ( const IEEEFloat multiplicand,
const IEEEFloat addend,
roundingMode  rounding_mode 
)

◆ getCategory()

fltCategory llvm::detail::IEEEFloat::getCategory ( ) const
inline

Definition at line 354 of file APFloat.h.

◆ getExactInverse()

bool llvm::detail::IEEEFloat::getExactInverse ( APFloat inv) const

If this value has an exact multiplicative inverse, store it in inv and return true.

Definition at line 3609 of file APFloat.cpp.

References llvm::lltok::APFloat, assert(), divide(), isDenormal(), isFiniteNonZero(), llvm::APFloatBase::opOK, llvm::fltSemantics::precision, and llvm::APFloatBase::rmNearestTiesToEven.

◆ getSemantics()

const fltSemantics& llvm::detail::IEEEFloat::getSemantics ( ) const
inline

Definition at line 355 of file APFloat.h.

Referenced by llvm::detail::frexp(), llvm::detail::ilogb(), and llvm::detail::scalbn().

◆ isDenormal()

bool llvm::detail::IEEEFloat::isDenormal ( ) const

IEEE-754R isSubnormal(): Returns true if and only if the float is a denormal.

Definition at line 759 of file APFloat.cpp.

References llvm::APInt::tcExtractBit().

Referenced by getExactInverse(), llvm::detail::ilogb(), and next().

◆ isFinite()

bool llvm::detail::IEEEFloat::isFinite ( ) const
inline

Returns true if and only if the current value is zero, subnormal, or normal.

This means that the value is not infinite or NaN.

Definition at line 331 of file APFloat.h.

Referenced by fusedMultiplyAdd().

◆ isFiniteNonZero()

bool llvm::detail::IEEEFloat::isFiniteNonZero ( ) const
inline

◆ isInfinity()

bool llvm::detail::IEEEFloat::isInfinity ( ) const
inline

IEEE-754R isInfinite(): Returns true if and only if the float is infinity.

Definition at line 341 of file APFloat.h.

References llvm::APFloatBase::fcInfinity.

Referenced by llvm::detail::ilogb().

◆ isInteger()

bool llvm::detail::IEEEFloat::isInteger ( ) const

Returns true if and only if the number is an exact integer.

Definition at line 824 of file APFloat.cpp.

References llvm::ScaledNumbers::compare(), roundToIntegral(), and llvm::truncated.

◆ isLargest()

bool llvm::detail::IEEEFloat::isLargest ( ) const

Returns true if and only if the number has the largest possible finite magnitude in the current semantics.

Definition at line 817 of file APFloat.cpp.

Referenced by next().

◆ isNaN()

bool llvm::detail::IEEEFloat::isNaN ( ) const
inline

Returns true if and only if the float is a quiet or signaling NaN.

Definition at line 344 of file APFloat.h.

References llvm::APFloatBase::fcNaN.

Referenced by llvm::detail::hash_value(), llvm::detail::ilogb(), isSignaling(), makeQuiet(), and llvm::detail::scalbn().

◆ isNegative()

bool llvm::detail::IEEEFloat::isNegative ( ) const
inline

IEEE-754R isSignMinus: Returns true if and only if the current value is negative.

This applies to zeros and NaNs as well.

Definition at line 319 of file APFloat.h.

Referenced by next(), roundToIntegral(), and toString().

◆ isNegZero()

bool llvm::detail::IEEEFloat::isNegZero ( ) const
inline

◆ isNonZero()

bool llvm::detail::IEEEFloat::isNonZero ( ) const
inline

Definition at line 356 of file APFloat.h.

References llvm::APFloatBase::fcZero.

Referenced by ~IEEEFloat().

◆ 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 325 of file APFloat.h.

◆ isPosZero()

bool llvm::detail::IEEEFloat::isPosZero ( ) const
inline

Definition at line 358 of file APFloat.h.

References isZero().

◆ isSignaling()

bool llvm::detail::IEEEFloat::isSignaling ( ) const

Returns true if and only if the float is a signaling NaN.

Definition at line 3638 of file APFloat.cpp.

References isNaN(), llvm::fltSemantics::precision, and llvm::APInt::tcExtractBit().

Referenced by next().

◆ 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 765 of file APFloat.cpp.

References assert(), and llvm::fltSemantics::minExponent.

Referenced by next().

◆ isZero()

bool llvm::detail::IEEEFloat::isZero ( ) const
inline

Returns true if and only if the float is plus or minus zero.

Definition at line 334 of file APFloat.h.

References llvm::APFloatBase::fcZero.

Referenced by llvm::detail::ilogb(), mod(), and remainder().

◆ makeInf()

void llvm::detail::IEEEFloat::makeInf ( bool  Neg = false)

◆ makeLargest()

void llvm::detail::IEEEFloat::makeLargest ( bool  Negative = false)

Make this number the largest magnitude normal number in the given semantics.

Definition at line 3247 of file APFloat.cpp.

References llvm::APFloatBase::fcNormal, llvm::APFloatBase::integerPartWidth, llvm::fltSemantics::maxExponent, and llvm::fltSemantics::precision.

Referenced by next().

◆ makeNaN()

void llvm::detail::IEEEFloat::makeNaN ( bool  SNaN = false,
bool  Neg = false,
const APInt fill = nullptr 
)

◆ makeQuiet()

void llvm::detail::IEEEFloat::makeQuiet ( )

◆ makeSmallest()

void llvm::detail::IEEEFloat::makeSmallest ( bool  Negative = false)

Make this number the smallest magnitude denormal number in the given semantics.

Definition at line 3272 of file APFloat.cpp.

References llvm::APFloatBase::fcNormal, llvm::fltSemantics::minExponent, and llvm::APInt::tcSet().

Referenced by next().

◆ makeSmallestNormalized()

void llvm::detail::IEEEFloat::makeSmallestNormalized ( bool  Negative = false)

Returns the smallest (by magnitude) normalized finite number in the given semantics.

Parameters
Negative- True iff the number should be negative

Definition at line 3283 of file APFloat.cpp.

References llvm::APFloatBase::fcNormal, llvm::APFloatBase::integerPartWidth, llvm::fltSemantics::minExponent, llvm::partCountForBits(), and llvm::fltSemantics::precision.

◆ makeZero()

void llvm::detail::IEEEFloat::makeZero ( bool  Neg = false)

◆ mod()

IEEEFloat::opStatus llvm::detail::IEEEFloat::mod ( const IEEEFloat rhs)

◆ multiply()

IEEEFloat::opStatus llvm::detail::IEEEFloat::multiply ( const IEEEFloat rhs,
roundingMode  rounding_mode 
)

Definition at line 1670 of file APFloat.cpp.

References isFiniteNonZero(), llvm::lfExactlyZero, and llvm::APFloatBase::opInexact.

Referenced by remainder().

◆ needsCleanup()

bool llvm::detail::IEEEFloat::needsCleanup ( ) const
inline

Returns whether this instance allocated memory.

Definition at line 244 of file APFloat.h.

References llvm::ARM_AM::add, llvm::ScaledNumbers::compare(), llvm::operator==(), and remainder.

◆ next()

IEEEFloat::opStatus llvm::detail::IEEEFloat::next ( bool  nextDown)

◆ operator=() [1/2]

IEEEFloat & llvm::detail::IEEEFloat::operator= ( const IEEEFloat rhs)

Definition at line 734 of file APFloat.cpp.

References initialize().

◆ operator=() [2/2]

IEEEFloat & llvm::detail::IEEEFloat::operator= ( IEEEFloat &&  rhs)

Definition at line 746 of file APFloat.cpp.

References llvm::semBogus.

◆ operator==()

bool llvm::detail::IEEEFloat::operator== ( const IEEEFloat ) const
delete

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.

◆ remainder()

IEEEFloat::opStatus llvm::detail::IEEEFloat::remainder ( const IEEEFloat rhs)

◆ roundToIntegral()

IEEEFloat::opStatus llvm::detail::IEEEFloat::roundToIntegral ( roundingMode  rounding_mode)

◆ subtract()

IEEEFloat::opStatus llvm::detail::IEEEFloat::subtract ( const IEEEFloat rhs,
roundingMode  rounding_mode 
)

◆ toString()

void llvm::detail::IEEEFloat::toString ( SmallVectorImpl< char > &  Str,
unsigned  FormatPrecision = 0,
unsigned  FormatMaxPadding = 3,
bool  TruncateZero = true 
) const

Converts this value into a decimal string.

Parameters
FormatPrecisionThe 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.
FormatMaxPaddingThe maximum number of zeros to consider inserting before falling back to scientific notation. 0 means to always use scientific notation.
TruncateZeroIndicate 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 3393 of file APFloat.cpp.

References llvm::sys::path::append(), llvm::SmallVectorImpl< T >::append(), assert(), llvm::APInt::countTrailingZeros(), E, llvm::SmallVectorBase::empty(), llvm::APFloatBase::fcInfinity, llvm::APFloatBase::fcNaN, llvm::APFloatBase::fcNormal, llvm::APFloatBase::fcZero, llvm::APInt::getBitWidth(), llvm::APInt::getZExtValue(), I, isNegative(), llvm::APInt::lshrInPlace(), llvm::makeArrayRef(), llvm::partCountForBits(), llvm::fltSemantics::precision, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), llvm::SmallVectorTemplateCommon< T >::size(), llvm::APInt::udivrem(), and llvm::APInt::zext().

Friends And Related Function Documentation

◆ frexp

IEEEFloat frexp ( const IEEEFloat X,
int &  Exp,
roundingMode   
)
friend

◆ hash_value

hash_code hash_value ( const IEEEFloat Arg)
friend

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 2772 of file APFloat.cpp.

◆ ilogb

int ilogb ( const IEEEFloat Arg)
friend

Returns the exponent of the internal representation of the APFloat.

Because the radix of APFloat is 2, this is equivalent to floor(log2(x)). For special APFloat values, this returns special error codes:

NaN -> IEK_NaN 0 -> IEK_Zero Inf -> IEK_Inf

Definition at line 3786 of file APFloat.cpp.

Referenced by llvm::detail::frexp(), and mod().

◆ scalbn

IEEEFloat scalbn ( IEEEFloat  X,
int  Exp,
roundingMode   
)
friend

Returns: X * 2^Exp for integral exponents.

Referenced by llvm::detail::frexp(), and mod().


The documentation for this class was generated from the following files: