OpenCV453
クラス | 関数 | 変数

クラス

struct  cv::softfloat
 
struct  cv::softdouble
 

関数

 cv::softfloat::softfloat ()
 Default constructor
 
 cv::softfloat::softfloat (const softfloat &c)
 Copy constructor
 
softfloatcv::softfloat::operator= (const softfloat &c)
 Assign constructor
 
static const softfloat cv::softfloat::fromRaw (const uint32_t a)
 Construct from raw [詳解]
 
 cv::softfloat::softfloat (const uint32_t)
 Construct from integer
 
 cv::softfloat::softfloat (const uint64_t)
 
 cv::softfloat::softfloat (const int32_t)
 
 cv::softfloat::softfloat (const int64_t)
 
 cv::softfloat::softfloat (const float a)
 Construct from float
 
 cv::softfloat::operator softdouble () const
 Type casts

 
 cv::softfloat::operator float () const
 
softfloat cv::softfloat::operator+ (const softfloat &) const
 Basic arithmetics
 
softfloat cv::softfloat::operator- (const softfloat &) const
 
softfloat cv::softfloat::operator* (const softfloat &) const
 
softfloat cv::softfloat::operator/ (const softfloat &) const
 
softfloat cv::softfloat::operator- () const
 
softfloat cv::softfloat::operator% (const softfloat &) const
 Remainder operator [詳解]
 
softfloatcv::softfloat::operator+= (const softfloat &a)
 
softfloatcv::softfloat::operator-= (const softfloat &a)
 
softfloatcv::softfloat::operator*= (const softfloat &a)
 
softfloatcv::softfloat::operator/= (const softfloat &a)
 
softfloatcv::softfloat::operator%= (const softfloat &a)
 
bool cv::softfloat::operator== (const softfloat &) const
 Comparison operations [詳解]
 
bool cv::softfloat::operator!= (const softfloat &) const
 
bool cv::softfloat::operator> (const softfloat &) const
 
bool cv::softfloat::operator>= (const softfloat &) const
 
bool cv::softfloat::operator< (const softfloat &) const
 
bool cv::softfloat::operator<= (const softfloat &) const
 
bool cv::softfloat::isNaN () const
 NaN state indicator
 
bool cv::softfloat::isInf () const
 Inf state indicator
 
bool cv::softfloat::isSubnormal () const
 Subnormal number indicator
 
bool cv::softfloat::getSign () const
 Get sign bit
 
softfloat cv::softfloat::setSign (bool sign) const
 Construct a copy with new sign bit
 
int cv::softfloat::getExp () const
 Get 0-based exponent
 
softfloat cv::softfloat::setExp (int e) const
 Construct a copy with new 0-based exponent
 
softfloat cv::softfloat::getFrac () const
 Get a fraction part [詳解]
 
softfloat cv::softfloat::setFrac (const softfloat &s) const
 Construct a copy with provided significand [詳解]
 
static softfloat cv::softfloat::zero ()
 Zero constant
 
static softfloat cv::softfloat::inf ()
 Positive infinity constant
 
static softfloat cv::softfloat::nan ()
 Default NaN constant
 
static softfloat cv::softfloat::one ()
 One constant
 
static softfloat cv::softfloat::min ()
 Smallest normalized value
 
static softfloat cv::softfloat::eps ()
 Difference between 1 and next representable value
 
static softfloat cv::softfloat::max ()
 Biggest finite value
 
static softfloat cv::softfloat::pi ()
 Correct pi approximation
 
 cv::softdouble::softdouble ()
 Default constructor
 
 cv::softdouble::softdouble (const softdouble &c)
 Copy constructor
 
softdoublecv::softdouble::operator= (const softdouble &c)
 Assign constructor
 
static softdouble cv::softdouble::fromRaw (const uint64_t a)
 Construct from raw [詳解]
 
 cv::softdouble::softdouble (const uint32_t)
 Construct from integer
 
 cv::softdouble::softdouble (const uint64_t)
 
 cv::softdouble::softdouble (const int32_t)
 
 cv::softdouble::softdouble (const int64_t)
 
 cv::softdouble::softdouble (const double a)
 Construct from double
 
 cv::softdouble::operator softfloat () const
 Type casts

 
 cv::softdouble::operator double () const
 
softdouble cv::softdouble::operator+ (const softdouble &) const
 Basic arithmetics
 
softdouble cv::softdouble::operator- (const softdouble &) const
 
softdouble cv::softdouble::operator* (const softdouble &) const
 
softdouble cv::softdouble::operator/ (const softdouble &) const
 
softdouble cv::softdouble::operator- () const
 
softdouble cv::softdouble::operator% (const softdouble &) const
 Remainder operator [詳解]
 
softdoublecv::softdouble::operator+= (const softdouble &a)
 
softdoublecv::softdouble::operator-= (const softdouble &a)
 
softdoublecv::softdouble::operator*= (const softdouble &a)
 
softdoublecv::softdouble::operator/= (const softdouble &a)
 
softdoublecv::softdouble::operator%= (const softdouble &a)
 
bool cv::softdouble::operator== (const softdouble &) const
 Comparison operations [詳解]
 
bool cv::softdouble::operator!= (const softdouble &) const
 
bool cv::softdouble::operator> (const softdouble &) const
 
bool cv::softdouble::operator>= (const softdouble &) const
 
bool cv::softdouble::operator< (const softdouble &) const
 
bool cv::softdouble::operator<= (const softdouble &) const
 
bool cv::softdouble::isNaN () const
 NaN state indicator
 
bool cv::softdouble::isInf () const
 Inf state indicator
 
bool cv::softdouble::isSubnormal () const
 Subnormal number indicator
 
bool cv::softdouble::getSign () const
 Get sign bit
 
softdouble cv::softdouble::setSign (bool sign) const
 Construct a copy with new sign bit
 
int cv::softdouble::getExp () const
 Get 0-based exponent
 
softdouble cv::softdouble::setExp (int e) const
 Construct a copy with new 0-based exponent
 
softdouble cv::softdouble::getFrac () const
 Get a fraction part [詳解]
 
softdouble cv::softdouble::setFrac (const softdouble &s) const
 Construct a copy with provided significand [詳解]
 
static softdouble cv::softdouble::zero ()
 Zero constant
 
static softdouble cv::softdouble::inf ()
 Positive infinity constant
 
static softdouble cv::softdouble::nan ()
 Default NaN constant
 
static softdouble cv::softdouble::one ()
 One constant
 
static softdouble cv::softdouble::min ()
 Smallest normalized value
 
static softdouble cv::softdouble::eps ()
 Difference between 1 and next representable value
 
static softdouble cv::softdouble::max ()
 Biggest finite value
 
static softdouble cv::softdouble::pi ()
 Correct pi approximation
 
CV_EXPORTS softfloat cv::mulAdd (const softfloat &a, const softfloat &b, const softfloat &c)
 Fused Multiplication and Addition [詳解]
 
CV_EXPORTS softdouble cv::mulAdd (const softdouble &a, const softdouble &b, const softdouble &c)
 
CV_EXPORTS softfloat cv::sqrt (const softfloat &a)
 Square root
 
CV_EXPORTS softdouble cv::sqrt (const softdouble &a)
 
template<typename _Tp >
static _Tp cv::saturate_cast (softfloat a)
 Saturate casts
 
template<typename _Tp >
static _Tp cv::saturate_cast (softdouble a)
 
template<>
uchar cv::saturate_cast< uchar > (softfloat a)
 
template<>
uchar cv::saturate_cast< uchar > (softdouble a)
 
template<>
schar cv::saturate_cast< schar > (softfloat a)
 
template<>
schar cv::saturate_cast< schar > (softdouble a)
 
template<>
ushort cv::saturate_cast< ushort > (softfloat a)
 
template<>
ushort cv::saturate_cast< ushort > (softdouble a)
 
template<>
short cv::saturate_cast< short > (softfloat a)
 
template<>
short cv::saturate_cast< short > (softdouble a)
 
template<>
int cv::saturate_cast< int > (softfloat a)
 
template<>
int cv::saturate_cast< int > (softdouble a)
 
template<>
int64_t cv::saturate_cast< int64_t > (softfloat a)
 
template<>
int64_t cv::saturate_cast< int64_t > (softdouble a)
 
template<>
unsigned cv::saturate_cast< unsigned > (softfloat a)
 Saturate cast to unsigned integer and unsigned long long integer We intentionally do not clip negative numbers, to make -1 become 0xffffffff etc.
 
template<>
unsigned cv::saturate_cast< unsigned > (softdouble a)
 
template<>
uint64_t cv::saturate_cast< uint64_t > (softfloat a)
 
template<>
uint64_t cv::saturate_cast< uint64_t > (softdouble a)
 
softfloat cv::min (const softfloat &a, const softfloat &b)
 Min and Max functions
 
softdouble cv::min (const softdouble &a, const softdouble &b)
 
softfloat cv::max (const softfloat &a, const softfloat &b)
 
softdouble cv::max (const softdouble &a, const softdouble &b)
 
softfloat cv::abs (softfloat a)
 Absolute value
 
softdouble cv::abs (softdouble a)
 
CV_EXPORTS softfloat cv::exp (const softfloat &a)
 Exponent [詳解]
 
CV_EXPORTS softdouble cv::exp (const softdouble &a)
 
CV_EXPORTS softfloat cv::log (const softfloat &a)
 Natural logarithm [詳解]
 
CV_EXPORTS softdouble cv::log (const softdouble &a)
 
CV_EXPORTS softfloat cv::pow (const softfloat &a, const softfloat &b)
 Raising to the power [詳解]
 
CV_EXPORTS softdouble cv::pow (const softdouble &a, const softdouble &b)
 
CV_EXPORTS softfloat cv::cbrt (const softfloat &a)
 Cube root [詳解]
 
CV_EXPORTS softdouble cv::sin (const softdouble &a)
 Sine [詳解]
 
CV_EXPORTS softdouble cv::cos (const softdouble &a)
 Cosine [詳解]
 

変数

uint32_t cv::softfloat::v
 
uint64_t cv::softdouble::v
 

詳解

SoftFloat is a software implementation of floating-point calculations according to IEEE 754 standard. All calculations are done in integers, that's why they are machine-independent and bit-exact. This library can be useful in accuracy-critical parts like look-up tables generation, tests, etc. OpenCV contains a subset of SoftFloat partially rewritten to C++.

Types

There are two basic types: softfloat and softdouble. These types are binary compatible with float and double types respectively and support conversions to/from them. Other types from original SoftFloat library like fp16 or fp128 were thrown away as well as quiet/signaling NaN support, on-the-fly rounding mode switch and exception flags (though exceptions can be implemented in the future).

Operations

Both types support the following:

関数詳解

◆ cbrt()

CV_EXPORTS softfloat cv::cbrt ( const softfloat a)

Cube root

Special cases:

  • cbrt(NaN) is NaN
  • cbrt(+/-Inf) is +/-Inf

◆ cos()

CV_EXPORTS softdouble cv::cos ( const softdouble a)

Cosine

Special cases:

  • cos(Inf) or cos(NaN) is NaN
  • cos(x) == +/- 1 when cos(x) is close to +/- 1

◆ exp()

CV_EXPORTS softfloat cv::exp ( const softfloat a)

Exponent

Special cases:

  • exp(NaN) is NaN
  • exp(-Inf) == 0
  • exp(+Inf) == +Inf

◆ fromRaw() [1/2]

static const softfloat cv::softfloat::fromRaw ( const uint32_t  a)
inlinestatic

Construct from raw

Builds new value from raw binary representation

◆ fromRaw() [2/2]

static softdouble cv::softdouble::fromRaw ( const uint64_t  a)
inlinestatic

Construct from raw

Builds new value from raw binary representation

◆ getFrac() [1/2]

softfloat cv::softfloat::getFrac ( ) const
inline

Get a fraction part

Returns a number 1 <= x < 2 with the same significand

◆ getFrac() [2/2]

softdouble cv::softdouble::getFrac ( ) const
inline

Get a fraction part

Returns a number 1 <= x < 2 with the same significand

◆ log()

CV_EXPORTS softfloat cv::log ( const softfloat a)

Natural logarithm

Special cases:

  • log(NaN), log(x < 0) are NaN
  • log(0) == -Inf

◆ mulAdd()

CV_EXPORTS softfloat cv::mulAdd ( const softfloat a,
const softfloat b,
const softfloat c 
)

Fused Multiplication and Addition

Computes (a*b)+c with single rounding

◆ operator%() [1/2]

softdouble cv::softdouble::operator% ( const softdouble ) const

Remainder operator

A quote from original SoftFloat manual:

The IEEE Standard remainder operation computes the value a - n * b, where n is the integer closest to a / b. If a / b is exactly halfway between two integers, n is the even integer closest to a / b. The IEEE Standard’s remainder operation is always exact and so requires no rounding. Depending on the relative magnitudes of the operands, the remainder functions can take considerably longer to execute than the other SoftFloat functions. This is an inherent characteristic of the remainder operation itself and is not a flaw in the SoftFloat implementation.

◆ operator%() [2/2]

softfloat cv::softfloat::operator% ( const softfloat ) const

Remainder operator

A quote from original SoftFloat manual:

The IEEE Standard remainder operation computes the value a - n * b, where n is the integer closest to a / b. If a / b is exactly halfway between two integers, n is the even integer closest to a / b. The IEEE Standard’s remainder operation is always exact and so requires no rounding. Depending on the relative magnitudes of the operands, the remainder functions can take considerably longer to execute than the other SoftFloat functions. This is an inherent characteristic of the remainder operation itself and is not a flaw in the SoftFloat implementation.

◆ operator==() [1/2]

bool cv::softdouble::operator== ( const softdouble ) const

Comparison operations

  • Any operation with NaN produces false
    • The only exception is when x is NaN: x != y for any y.
  • Positive and negative zeros are equal

◆ operator==() [2/2]

bool cv::softfloat::operator== ( const softfloat ) const

Comparison operations

  • Any operation with NaN produces false
    • The only exception is when x is NaN: x != y for any y.
  • Positive and negative zeros are equal

◆ pow()

CV_EXPORTS softfloat cv::pow ( const softfloat a,
const softfloat b 
)

Raising to the power

Special cases:

  • x**NaN is NaN for any x
  • ( |x| == 1 )**Inf is NaN
  • ( |x| > 1 )**+Inf or ( |x| < 1 )**-Inf is +Inf
  • ( |x| > 1 )**-Inf or ( |x| < 1 )**+Inf is 0
  • x ** 0 == 1 for any x
  • x ** 1 == 1 for any x
  • NaN ** y is NaN for any other y
  • Inf**(y < 0) == 0
  • Inf ** y is +Inf for any other y
  • (x < 0)**y is NaN for any other y if x can't be correctly rounded to integer
  • 0 ** 0 == 1
  • 0 ** (y < 0) is +Inf
  • 0 ** (y > 0) is 0

◆ setFrac() [1/2]

softdouble cv::softdouble::setFrac ( const softdouble s) const
inline

Construct a copy with provided significand

Constructs a copy of a number with significand taken from parameter

◆ setFrac() [2/2]

softfloat cv::softfloat::setFrac ( const softfloat s) const
inline

Construct a copy with provided significand

Constructs a copy of a number with significand taken from parameter

◆ sin()

CV_EXPORTS softdouble cv::sin ( const softdouble a)

Sine

Special cases:

  • sin(Inf) or sin(NaN) is NaN
  • sin(x) == x when sin(x) is close to zero