Home | History | Annotate | Download | only in ADT

Lines Matching defs:APFloat

1 //===- llvm/ADT/APFloat.h - Arbitrary Precision Floating Point ---*- C++ -*-==//
39 class APFloat;
58 /// APFloat uses bignum integer arithmetic as provided by static functions in
119 /// APFloat does not provide any exception handling beyond default exception
139 // This is the common type definitions shared by APFloat and its internal
202 /// Convenience enum used to construct an uninitialized APFloat.
377 /// Overload to compute a hash code for an APFloat value.
419 bool getExactInverse(APFloat *inv) const;
421 /// Returns the exponent of the internal representation of the APFloat.
423 /// Because the radix of APFloat is 2, this is equivalent to floor(log2(x)).
424 /// For special APFloat
577 std::unique_ptr<APFloat[]> Floats;
579 opStatus addImpl(const APFloat &a, const APFloat &aa, const APFloat &c,
580 const APFloat &cc, roundingMode RM);
590 DoubleAPFloat(const fltSemantics &S, APFloat &&First, APFloat &&Second);
606 APFloat &getFirst() { return Floats[0]; }
607 const APFloat &getFirst() const { return Floats[0]; }
608 APFloat &getSecond() { return Floats[1]; }
609 const APFloat &getSecond() const { return Floats[1]; }
660 bool getExactInverse(APFloat *inv) const;
674 class APFloat : public APFloatBase {
817 APFloat() : U(IEEEdouble()) {
821 explicit APFloat(IEEEFloat F, const fltSemantics &S) : U(std::move(F), S) {}
822 explicit APFloat(DoubleAPFloat F, const fltSemantics &S)
825 cmpResult compareAbsoluteValue(const APFloat &RHS) const {
836 APFloat(const fltSemantics &Semantics) : U(Semantics) {}
837 APFloat(const fltSemantics &Semantics, StringRef S);
838 APFloat(const fltSemantics &Semantics, integerPart I) : U(Semantics, I) {}
840 APFloat(const fltSemantics &Semantics, uninitializedTag)
842 APFloat(const fltSemantics &Semantics, const APInt &I) : U(Semantics, I) {}
843 explicit APFloat(double d) : U(IEEEFloat(d), IEEEdouble()) {}
844 explicit APFloat(float f) : U(IEEEFloat(f), IEEEsingle()) {}
845 APFloat(const APFloat &RHS) = default;
846 APFloat(APFloat &&RHS) = default;
848 ~APFloat() = default;
855 static APFloat getZero(const fltSemantics &Sem, bool Negative = false) {
856 APFloat Val(Sem, uninitialized);
864 static APFloat getInf(const fltSemantics &Sem, bool Negative = false) {
865 APFloat Val(Sem, uninitialized);
875 static APFloat getNaN(const fltSemantics &Sem, bool Negative = false,
886 static APFloat getQNaN(const fltSemantics &Sem, bool Negative = false,
888 APFloat
894 static APFloat getSNaN(const fltSemantics &Sem, bool Negative = false,
896 APFloat Val(Sem, uninitialized);
904 static APFloat getLargest(const fltSemantics &Sem, bool Negative = false) {
905 APFloat Val(Sem, uninitialized);
914 static APFloat getSmallest(const fltSemantics &Sem, bool Negative = false) {
915 APFloat Val(Sem, uninitialized);
924 static APFloat getSmallestNormalized(const fltSemantics &Sem,
926 APFloat Val(Sem, uninitialized);
935 static APFloat getAllOnesValue(unsigned BitWidth, bool isIEEE = false);
937 /// Used to insert APFloat objects, or objects that contain APFloat objects,
941 opStatus add(const APFloat &RHS, roundingMode RM) {
950 opStatus subtract(const APFloat &RHS, roundingMode RM) {
959 opStatus multiply(const APFloat &RHS, roundingMode RM) {
968 opStatus divide(const APFloat &RHS, roundingMode RM) {
977 opStatus remainder(const APFloat &RHS) {
986 opStatus mod(const APFloat &RHS) {
995 opStatus fusedMultiplyAdd(const APFloat &Multiplicand, const APFloat &Addend,
1020 APFloat operator+(const APFloat &RHS) const {
1021 APFloat Result(*this);
1028 APFloat operator-(const APFloat &RHS) const {
1029 APFloat Result(*this);
1036 APFloat operator*(const APFloat &RHS) const {
1037 APFloat Result(*this);
1042 /// Divide the first APFloat by the second, rounding ties to the nearest even.
1044 APFloat operator/(const APFloat &RHS) const {
1045 APFloat Result(*this);
1055 void copySign(const APFloat &RHS) {
1060 /// A static helper to produce a copy of an APFloat value with its sign
1061 /// copied from some other APFloat.
1062 static APFloat copySign(APFloat Value, const APFloat &Sign) {
1100 bool operator==(const APFloat &) const = delete;
1102 cmpResult compare(const APFloat &RHS) const {
1112 bool bitwiseIsEqual(const APFloat &RHS) const {
1149 APFloat &operator=(const APFloat &RHS) = default;
1150 APFloat &operator=(APFloat &&RHS) = default;
1161 bool getExactInverse(APFloat *inv) const {
1165 friend hash_code hash_value(const APFloat &Arg);
1166 friend int ilogb(const APFloat &Arg) { return ilogb(Arg.getIEEE()); }
1167 friend APFloat scalbn(APFloat X, int Exp, roundingMode RM);
1168 friend APFloat frexp(const APFloat &X, int &Exp, roundingMode RM);
1177 hash_code hash_value(const APFloat &Arg);
1178 inline APFloat scalbn(APFloat X, int Exp, APFloat::roundingMode RM) {
1179 if (APFloat::usesLayout<detail::IEEEFloat>(X.getSemantics()))
1180 return APFloat(scalbn(X.U.IEEE, Exp, RM), X.getSemantics());
1181 if (APFloat::usesLayout<detail::DoubleAPFloat>(X.getSemantics()))
1182 return APFloat(scalbn(X.U.Double, Exp, RM), X.getSemantics());
1190 inline APFloat frexp(const APFloat &X, int &Exp, APFloat::roundingMode RM) {
1191 if (APFloat::usesLayout<detail::IEEEFloat>(X.getSemantics()))
1192 return APFloat(frexp(X.U.IEEE, Exp, RM), X.getSemantics());
1193 if (APFloat::usesLayout<detail::DoubleAPFloat>(X.getSemantics()))
1194 return APFloat(frexp(X.U.Double, Exp, RM), X.getSemantics());
1198 inline APFloat abs(APFloat X) {
1204 inline APFloat neg(APFloat X) {
1212 inline APFloat minnum(const APFloat &A, const APFloat &B) {
1217 return (B.compare(A) == APFloat::cmpLessThan) ? B : A;
1223 inline APFloat maxnum(const APFloat &A, const APFloat &B) {
1228 return (A.compare(B) == APFloat::cmpLessThan) ? B : A;