#include <APFloat.h>
Classes | |
union | Significand |
Public Types | |
enum | cmpResult { cmpLessThan, cmpEqual, cmpGreaterThan, cmpUnordered } |
enum | roundingMode { rmNearestTiesToEven, rmTowardPositive, rmTowardNegative, rmTowardZero, rmNearestTiesToAway } |
enum | opStatus { opOK = 0x00, opInvalidOp = 0x01, opDivByZero = 0x02, opOverflow = 0x04, opUnderflow = 0x08, opInexact = 0x10 } |
enum | fltCategory { fcInfinity, fcNaN, fcNormal, fcZero } |
enum | uninitializedTag { uninitialized } |
Public Member Functions | |
APFloat (const fltSemantics &) | |
APFloat (const fltSemantics &, StringRef) | |
APFloat (const fltSemantics &, integerPart) | |
APFloat (const fltSemantics &, fltCategory, bool negative) | |
APFloat (const fltSemantics &, uninitializedTag) | |
APFloat (double d) | |
APFloat (float f) | |
APFloat (const APInt &, bool isIEEE=false) | |
APFloat (const APFloat &) | |
~APFloat () | |
void | Profile (FoldingSetNodeID &NID) const |
Profile - Used to insert APFloat objects, or objects that contain APFloat objects, into FoldingSets. | |
void | Emit (Serializer &S) const |
Used by the Bitcode serializer to emit APInts to Bitcode. | |
opStatus | add (const APFloat &, roundingMode) |
opStatus | subtract (const APFloat &, roundingMode) |
opStatus | multiply (const APFloat &, roundingMode) |
opStatus | divide (const APFloat &, roundingMode) |
opStatus | remainder (const APFloat &) |
opStatus | mod (const APFloat &, roundingMode) |
opStatus | fusedMultiplyAdd (const APFloat &, const APFloat &, roundingMode) |
void | changeSign () |
void | clearSign () |
void | copySign (const APFloat &) |
opStatus | convert (const fltSemantics &, roundingMode, bool *) |
APFloat::convert - convert a value of one floating point type to another. | |
opStatus | convertToInteger (integerPart *, unsigned int, bool, roundingMode, bool *) const |
opStatus | convertToInteger (APSInt &, 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 |
cmpResult | compare (const APFloat &) const |
bool | bitwiseIsEqual (const APFloat &) const |
unsigned int | convertToHexString (char *dst, unsigned int hexDigits, bool upperCase, roundingMode) const |
fltCategory | getCategory () const |
const fltSemantics & | getSemantics () const |
bool | isZero () const |
bool | isNonZero () const |
bool | isNaN () const |
bool | isInfinity () const |
bool | isNegative () const |
bool | isPosZero () const |
bool | isNegZero () const |
APFloat & | operator= (const APFloat &) |
uint32_t | getHashValue () const |
void | toString (SmallVectorImpl< char > &Str, unsigned FormatPrecision=0, unsigned FormatMaxPadding=3) const |
Converts this value into a decimal string. | |
bool | getExactInverse (APFloat *inv) const |
getExactInverse - If this value has an exact multiplicative inverse, store it in inv and return true. | |
Static Public Member Functions | |
static unsigned int | semanticsPrecision (const fltSemantics &) |
static APFloat | getZero (const fltSemantics &Sem, bool Negative=false) |
static APFloat | getInf (const fltSemantics &Sem, bool Negative=false) |
static APFloat | getNaN (const fltSemantics &Sem, bool Negative=false, unsigned type=0) |
getNaN - Factory for QNaN values. | |
static APFloat | getQNaN (const fltSemantics &Sem, bool Negative=false, const APInt *payload=0) |
getQNan - Factory for QNaN values. | |
static APFloat | getSNaN (const fltSemantics &Sem, bool Negative=false, const APInt *payload=0) |
getSNan - Factory for SNaN values. | |
static APFloat | getLargest (const fltSemantics &Sem, bool Negative=false) |
getLargest - Returns the largest finite number in the given semantics. | |
static APFloat | getSmallest (const fltSemantics &Sem, bool Negative=false) |
getSmallest - Returns the smallest (by magnitude) finite number in the given semantics. | |
static APFloat | getSmallestNormalized (const fltSemantics &Sem, bool Negative=false) |
getSmallestNormalized - Returns the smallest (by magnitude) normalized finite number in the given semantics. | |
static APFloat | getAllOnesValue (unsigned BitWidth, bool isIEEE=false) |
getAllOnesValue - Returns a float which is bitcasted from an all one value int. | |
static APFloat | ReadVal (Deserializer &D) |
Used by the Bitcode deserializer to deserialize APInts. | |
Static Public Attributes | |
static const fltSemantics | IEEEhalf = { 15, -14, 11, true } |
static const fltSemantics | IEEEsingle = { 127, -126, 24, true } |
static const fltSemantics | IEEEdouble = { 1023, -1022, 53, true } |
static const fltSemantics | IEEEquad = { 16383, -16382, 113, true } |
static const fltSemantics | PPCDoubleDouble = { 1023, -1022, 106, false } |
static const fltSemantics | x87DoubleExtended = { 16383, -16382, 64, true } |
static const fltSemantics | Bogus = { 0, 0, 0, true } |
Private Member Functions | |
integerPart * | significandParts () |
const integerPart * | significandParts () const |
unsigned int | partCount () const |
integerPart | addSignificand (const APFloat &) |
integerPart | subtractSignificand (const APFloat &, integerPart) |
lostFraction | addOrSubtractSignificand (const APFloat &, bool subtract) |
lostFraction | multiplySignificand (const APFloat &, const APFloat *) |
lostFraction | divideSignificand (const APFloat &) |
void | incrementSignificand () |
void | initialize (const fltSemantics *) |
void | shiftSignificandLeft (unsigned int) |
lostFraction | shiftSignificandRight (unsigned int) |
unsigned int | significandLSB () const |
unsigned int | significandMSB () const |
void | zeroSignificand () |
opStatus | addOrSubtractSpecials (const APFloat &, bool subtract) |
opStatus | divideSpecials (const APFloat &) |
opStatus | multiplySpecials (const APFloat &) |
opStatus | modSpecials (const APFloat &) |
void | makeNaN (bool SNaN=false, bool Neg=false, const APInt *fill=0) |
opStatus | normalize (roundingMode, lostFraction) |
opStatus | addOrSubtract (const APFloat &, roundingMode, bool subtract) |
cmpResult | compareAbsoluteValue (const APFloat &) const |
opStatus | handleOverflow (roundingMode) |
bool | roundAwayFromZero (roundingMode, lostFraction, unsigned int) const |
opStatus | convertToSignExtendedInteger (integerPart *, unsigned int, bool, roundingMode, bool *) const |
opStatus | convertFromUnsignedParts (const integerPart *, unsigned int, roundingMode) |
opStatus | convertFromHexadecimalString (StringRef, roundingMode) |
opStatus | convertFromDecimalString (StringRef, roundingMode) |
char * | convertNormalToHexString (char *, unsigned int, bool, roundingMode) const |
opStatus | roundSignificandWithExponent (const integerPart *, unsigned int, int, roundingMode) |
APInt | convertHalfAPFloatToAPInt () const |
APInt | convertFloatAPFloatToAPInt () const |
APInt | convertDoubleAPFloatToAPInt () const |
APInt | convertQuadrupleAPFloatToAPInt () const |
APInt | convertF80LongDoubleAPFloatToAPInt () const |
APInt | convertPPCDoubleDoubleAPFloatToAPInt () const |
void | initFromAPInt (const APInt &api, bool isIEEE=false) |
Treat api as containing the bits of a floating point number. | |
void | initFromHalfAPInt (const APInt &api) |
void | initFromFloatAPInt (const APInt &api) |
void | initFromDoubleAPInt (const APInt &api) |
void | initFromQuadrupleAPInt (const APInt &api) |
void | initFromF80LongDoubleAPInt (const APInt &api) |
Integer bit is explicit in this format. | |
void | initFromPPCDoubleDoubleAPInt (const APInt &api) |
void | assign (const APFloat &) |
void | copySignificand (const APFloat &) |
void | freeSignificand () |
Static Private Member Functions | |
static APFloat | makeNaN (const fltSemantics &Sem, bool SNaN, bool Negative, const APInt *fill) |
Private Attributes | |
const fltSemantics * | semantics |
union llvm::APFloat::Significand | significand |
exponent_t | exponent |
fltCategory | category: 3 |
unsigned int | sign: 1 |
exponent_t | exponent2: 11 |
unsigned int | sign2: 1 |
APFloat::APFloat | ( | const fltSemantics & | ourSemantics | ) |
APFloat::APFloat | ( | const fltSemantics & | ourSemantics, | |
StringRef | text | |||
) |
APFloat::APFloat | ( | const fltSemantics & | ourSemantics, | |
integerPart | value | |||
) |
APFloat::APFloat | ( | const fltSemantics & | ourSemantics, | |
fltCategory | ourCategory, | |||
bool | negative | |||
) |
APFloat::APFloat | ( | const fltSemantics & | ourSemantics, | |
uninitializedTag | tag | |||
) |
APFloat::APFloat | ( | double | d | ) | [explicit] |
APFloat::APFloat | ( | float | f | ) | [explicit] |
APFloat::APFloat | ( | const APInt & | api, | |
bool | isIEEE = false | |||
) | [explicit] |
APFloat::APFloat | ( | const APFloat & | rhs | ) |
APFloat::~APFloat | ( | ) |
APFloat::opStatus APFloat::add | ( | const APFloat & | rhs, | |
roundingMode | rounding_mode | |||
) |
APFloat::opStatus APFloat::addOrSubtract | ( | const APFloat & | rhs, | |
roundingMode | rounding_mode, | |||
bool | subtract | |||
) | [private] |
lostFraction APFloat::addOrSubtractSignificand | ( | const APFloat & | rhs, | |
bool | subtract | |||
) | [private] |
APFloat::opStatus APFloat::addOrSubtractSpecials | ( | const APFloat & | rhs, | |
bool | subtract | |||
) | [private] |
integerPart APFloat::addSignificand | ( | const APFloat & | rhs | ) | [private] |
void APFloat::assign | ( | const APFloat & | rhs | ) | [private] |
APInt APFloat::bitcastToAPInt | ( | ) | const |
bool APFloat::bitwiseIsEqual | ( | const APFloat & | rhs | ) | const |
void APFloat::changeSign | ( | ) |
void APFloat::clearSign | ( | ) |
APFloat::cmpResult APFloat::compare | ( | const APFloat & | rhs | ) | const |
APFloat::cmpResult APFloat::compareAbsoluteValue | ( | const APFloat & | rhs | ) | const [private] |
APFloat::opStatus APFloat::convert | ( | const fltSemantics & | toSemantics, | |
roundingMode | rounding_mode, | |||
bool * | losesInfo | |||
) |
APFloat::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).
APInt APFloat::convertDoubleAPFloatToAPInt | ( | ) | const [private] |
APInt APFloat::convertF80LongDoubleAPFloatToAPInt | ( | ) | const [private] |
APInt APFloat::convertFloatAPFloatToAPInt | ( | ) | const [private] |
APFloat::opStatus APFloat::convertFromAPInt | ( | const APInt & | Val, | |
bool | isSigned, | |||
roundingMode | rounding_mode | |||
) |
APFloat::opStatus APFloat::convertFromDecimalString | ( | StringRef | str, | |
roundingMode | rounding_mode | |||
) | [private] |
APFloat::opStatus APFloat::convertFromHexadecimalString | ( | StringRef | s, | |
roundingMode | rounding_mode | |||
) | [private] |
APFloat::opStatus APFloat::convertFromSignExtendedInteger | ( | const integerPart * | src, | |
unsigned int | srcCount, | |||
bool | isSigned, | |||
roundingMode | rounding_mode | |||
) |
APFloat::opStatus APFloat::convertFromString | ( | StringRef | str, | |
roundingMode | rounding_mode | |||
) |
APFloat::opStatus APFloat::convertFromUnsignedParts | ( | const integerPart * | src, | |
unsigned int | srcCount, | |||
roundingMode | rounding_mode | |||
) | [private] |
APFloat::opStatus APFloat::convertFromZeroExtendedInteger | ( | const integerPart * | parts, | |
unsigned int | width, | |||
bool | isSigned, | |||
roundingMode | rounding_mode | |||
) |
APInt APFloat::convertHalfAPFloatToAPInt | ( | ) | const [private] |
char * APFloat::convertNormalToHexString | ( | char * | dst, | |
unsigned int | hexDigits, | |||
bool | upperCase, | |||
roundingMode | rounding_mode | |||
) | const [private] |
APInt APFloat::convertPPCDoubleDoubleAPFloatToAPInt | ( | ) | const [private] |
APInt APFloat::convertQuadrupleAPFloatToAPInt | ( | ) | const [private] |
double APFloat::convertToDouble | ( | ) | const |
float APFloat::convertToFloat | ( | ) | const |
unsigned int APFloat::convertToHexString | ( | char * | dst, | |
unsigned int | hexDigits, | |||
bool | upperCase, | |||
roundingMode | rounding_mode | |||
) | const |
APFloat::opStatus APFloat::convertToInteger | ( | APSInt & | result, | |
roundingMode | rounding_mode, | |||
bool * | isExact | |||
) | const |
APFloat::opStatus APFloat::convertToInteger | ( | integerPart * | parts, | |
unsigned int | width, | |||
bool | isSigned, | |||
roundingMode | rounding_mode, | |||
bool * | isExact | |||
) | const |
APFloat::opStatus APFloat::convertToSignExtendedInteger | ( | integerPart * | parts, | |
unsigned int | width, | |||
bool | isSigned, | |||
roundingMode | rounding_mode, | |||
bool * | isExact | |||
) | const [private] |
void APFloat::copySign | ( | const APFloat & | rhs | ) |
void APFloat::copySignificand | ( | const APFloat & | rhs | ) | [private] |
APFloat::opStatus APFloat::divide | ( | const APFloat & | rhs, | |
roundingMode | rounding_mode | |||
) |
lostFraction APFloat::divideSignificand | ( | const APFloat & | rhs | ) | [private] |
APFloat::opStatus APFloat::divideSpecials | ( | const APFloat & | rhs | ) | [private] |
void llvm::APFloat::Emit | ( | Serializer & | S | ) | const |
Used by the Bitcode serializer to emit APInts to Bitcode.
void APFloat::freeSignificand | ( | ) | [private] |
APFloat::opStatus APFloat::fusedMultiplyAdd | ( | const APFloat & | multiplicand, | |
const APFloat & | addend, | |||
roundingMode | rounding_mode | |||
) |
APFloat APFloat::getAllOnesValue | ( | unsigned | BitWidth, | |
bool | isIEEE = false | |||
) | [static] |
getAllOnesValue - Returns a float which is bitcasted from an all one value int.
BitWidth | - Select float type | |
isIEEE | - If 128 bit number, select between PPC and IEEE |
fltCategory llvm::APFloat::getCategory | ( | ) | const [inline] |
bool APFloat::getExactInverse | ( | APFloat * | inv | ) | const |
getExactInverse - If this value has an exact multiplicative inverse, store it in inv and return true.
uint32_t APFloat::getHashValue | ( | ) | const |
static APFloat llvm::APFloat::getInf | ( | const fltSemantics & | Sem, | |
bool | Negative = false | |||
) | [inline, static] |
APFloat APFloat::getLargest | ( | const fltSemantics & | Sem, | |
bool | Negative = false | |||
) | [static] |
getLargest - Returns the largest finite number in the given semantics.
Negative | - True iff the number should be negative |
static APFloat llvm::APFloat::getNaN | ( | const fltSemantics & | Sem, | |
bool | Negative = false , |
|||
unsigned | type = 0 | |||
) | [inline, static] |
getNaN - Factory for QNaN values.
Negative | - True iff the NaN generated should be negative. | |
type | - The unspecified fill bits for creating the NaN, 0 by default. The value is truncated as necessary. |
static APFloat llvm::APFloat::getQNaN | ( | const fltSemantics & | Sem, | |
bool | Negative = false , |
|||
const APInt * | payload = 0 | |||
) | [inline, static] |
getQNan - Factory for QNaN values.
const fltSemantics& llvm::APFloat::getSemantics | ( | ) | const [inline] |
APFloat APFloat::getSmallest | ( | const fltSemantics & | Sem, | |
bool | Negative = false | |||
) | [static] |
getSmallest - Returns the smallest (by magnitude) finite number in the given semantics.
Might be denormalized, which implies a relative loss of precision.
Negative | - True iff the number should be negative |
APFloat APFloat::getSmallestNormalized | ( | const fltSemantics & | Sem, | |
bool | Negative = false | |||
) | [static] |
getSmallestNormalized - Returns the smallest (by magnitude) normalized finite number in the given semantics.
Negative | - True iff the number should be negative |
static APFloat llvm::APFloat::getSNaN | ( | const fltSemantics & | Sem, | |
bool | Negative = false , |
|||
const APInt * | payload = 0 | |||
) | [inline, static] |
getSNan - Factory for SNaN values.
static APFloat llvm::APFloat::getZero | ( | const fltSemantics & | Sem, | |
bool | Negative = false | |||
) | [inline, static] |
APFloat::opStatus APFloat::handleOverflow | ( | roundingMode | rounding_mode | ) | [private] |
void APFloat::incrementSignificand | ( | ) | [private] |
void APFloat::initFromAPInt | ( | const APInt & | api, | |
bool | isIEEE = false | |||
) | [private] |
Treat api as containing the bits of a floating point number.
Currently we infer the floating point type from the size of the APInt. The isIEEE argument distinguishes between PPC128 and IEEE128 (not meaningful when the size is anything else).
void APFloat::initFromDoubleAPInt | ( | const APInt & | api | ) | [private] |
void APFloat::initFromF80LongDoubleAPInt | ( | const APInt & | api | ) | [private] |
Integer bit is explicit in this format.
Intel hardware (387 and later) does not support these bit patterns: exponent = all 1's, integer bit 0, significand 0 ("pseudoinfinity") exponent = all 1's, integer bit 0, significand nonzero ("pseudoNaN") exponent = 0, integer bit 1 ("pseudodenormal") exponent!=0 nor all 1's, integer bit 0 ("unnormal") At the moment, the first two are treated as NaNs, the second two as Normal.
void APFloat::initFromFloatAPInt | ( | const APInt & | api | ) | [private] |
void APFloat::initFromHalfAPInt | ( | const APInt & | api | ) | [private] |
void APFloat::initFromPPCDoubleDoubleAPInt | ( | const APInt & | api | ) | [private] |
void APFloat::initFromQuadrupleAPInt | ( | const APInt & | api | ) | [private] |
void APFloat::initialize | ( | const fltSemantics * | ourSemantics | ) | [private] |
bool llvm::APFloat::isInfinity | ( | ) | const [inline] |
bool llvm::APFloat::isNaN | ( | ) | const [inline] |
bool llvm::APFloat::isNegative | ( | ) | const [inline] |
bool llvm::APFloat::isNegZero | ( | ) | const [inline] |
bool llvm::APFloat::isNonZero | ( | ) | const [inline] |
bool llvm::APFloat::isPosZero | ( | ) | const [inline] |
bool llvm::APFloat::isZero | ( | ) | const [inline] |
void APFloat::makeNaN | ( | bool | SNaN = false , |
|
bool | Neg = false , |
|||
const APInt * | fill = 0 | |||
) | [private] |
APFloat APFloat::makeNaN | ( | const fltSemantics & | Sem, | |
bool | SNaN, | |||
bool | Negative, | |||
const APInt * | fill | |||
) | [static, private] |
APFloat::opStatus APFloat::mod | ( | const APFloat & | rhs, | |
roundingMode | rounding_mode | |||
) |
APFloat::opStatus APFloat::modSpecials | ( | const APFloat & | rhs | ) | [private] |
APFloat::opStatus APFloat::multiply | ( | const APFloat & | rhs, | |
roundingMode | rounding_mode | |||
) |
lostFraction APFloat::multiplySignificand | ( | const APFloat & | rhs, | |
const APFloat * | addend | |||
) | [private] |
APFloat::opStatus APFloat::multiplySpecials | ( | const APFloat & | rhs | ) | [private] |
APFloat::opStatus APFloat::normalize | ( | roundingMode | rounding_mode, | |
lostFraction | lost_fraction | |||
) | [private] |
unsigned int APFloat::partCount | ( | ) | const [private] |
void llvm::APFloat::Profile | ( | FoldingSetNodeID & | NID | ) | const |
static APFloat llvm::APFloat::ReadVal | ( | Deserializer & | D | ) | [static] |
Used by the Bitcode deserializer to deserialize APInts.
APFloat::opStatus APFloat::remainder | ( | const APFloat & | rhs | ) |
bool APFloat::roundAwayFromZero | ( | roundingMode | rounding_mode, | |
lostFraction | lost_fraction, | |||
unsigned int | bit | |||
) | const [private] |
APFloat::opStatus APFloat::roundSignificandWithExponent | ( | const integerPart * | decSigParts, | |
unsigned | int, | |||
int | exp, | |||
roundingMode | rounding_mode | |||
) | [private] |
unsigned int APFloat::semanticsPrecision | ( | const fltSemantics & | semantics | ) | [static] |
void APFloat::shiftSignificandLeft | ( | unsigned int | bits | ) | [private] |
lostFraction APFloat::shiftSignificandRight | ( | unsigned int | bits | ) | [private] |
unsigned int APFloat::significandLSB | ( | ) | const [private] |
unsigned int APFloat::significandMSB | ( | ) | const [private] |
const integerPart * APFloat::significandParts | ( | ) | const [private] |
integerPart * APFloat::significandParts | ( | ) | [private] |
APFloat::opStatus APFloat::subtract | ( | const APFloat & | rhs, | |
roundingMode | rounding_mode | |||
) |
integerPart APFloat::subtractSignificand | ( | const APFloat & | rhs, | |
integerPart | borrow | |||
) | [private] |
void APFloat::toString | ( | SmallVectorImpl< char > & | Str, | |
unsigned | FormatPrecision = 0 , |
|||
unsigned | FormatMaxPadding = 3 | |||
) | const |
Converts this value into a decimal string.
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. |
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
void APFloat::zeroSignificand | ( | ) | [private] |
const fltSemantics llvm::APFloat::Bogus = { 0, 0, 0, true } [static] |
fltCategory llvm::APFloat::category [private] |
exponent_t llvm::APFloat::exponent [private] |
exponent_t llvm::APFloat::exponent2 [private] |
const fltSemantics llvm::APFloat::IEEEdouble = { 1023, -1022, 53, true } [static] |
const fltSemantics llvm::APFloat::IEEEhalf = { 15, -14, 11, true } [static] |
const fltSemantics llvm::APFloat::IEEEquad = { 16383, -16382, 113, true } [static] |
const fltSemantics llvm::APFloat::IEEEsingle = { 127, -126, 24, true } [static] |
const fltSemantics llvm::APFloat::PPCDoubleDouble = { 1023, -1022, 106, false } [static] |
const fltSemantics* llvm::APFloat::semantics [private] |
unsigned int llvm::APFloat::sign [private] |
unsigned int llvm::APFloat::sign2 [private] |
union llvm::APFloat::Significand llvm::APFloat::significand [private] |
const fltSemantics llvm::APFloat::x87DoubleExtended = { 16383, -16382, 64, true } [static] |