Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::numeric_limits<T>::tinyness_before

      From cppreference.com
      <cpp‎ |types‎ |numeric limits
       
       
      Utilities library
       
       
      std::numeric_limits
      Static constants
      numeric_limits::tinyness_before
      Static member functions
      Helper types
       
      staticconstbool tinyness_before;
      (until C++11)
      staticconstexprbool tinyness_before;
      (since C++11)

      The value ofstd::numeric_limits<T>::tinyness_before istrue for all floating-point typesT that test results of floating-point expressions for underflow before rounding.

      Contents

      [edit]Standard specializations

      T value ofstd::numeric_limits<T>::tinyness_before
      /* non-specialized */false
      boolfalse
      charfalse
      signedcharfalse
      unsignedcharfalse
      wchar_tfalse
      char8_t(since C++20)false
      char16_t(since C++11)false
      char32_t(since C++11)false
      shortfalse
      unsignedshortfalse
      intfalse
      unsignedintfalse
      longfalse
      unsignedlongfalse
      longlong(since C++11)false
      unsignedlonglong(since C++11)false
      float implementation-defined
      double implementation-defined
      longdouble implementation-defined

      [edit]Notes

      Standard-compliant IEEE 754 floating-point implementations are required to detect the floating-point underflow, and have two alternative situations where this can be done

      1. Underflow occurs (andFE_UNDERFLOW may be raised) if a computation produces a result whose absolute value, computed as though both the exponent range and the precision were unbounded, is smaller thanstd::numeric_limits<T>::min(). Such implementation detects tinyness before rounding (e.g. UltraSparc, POWER).
      2. Underflow occurs (andFE_UNDERFLOW may be raised) if after the rounding of the result to the target floating-point type (that is, rounding tostd::numeric_limits<T>::digits bits), the result's absolute value is smaller thanstd::numeric_limits<T>::min(). Formally, the absolute value of a nonzero result computed as though the exponent range were unbounded is smaller thanstd::numeric_limits<T>::min(). Such implementation detects tinyness after rounding (e.g. SuperSparc).

      [edit]Example

      Multiplication of the largest subnormal number by the number one machine epsilon greater than 1.0 gives the tiny value 0x0.fffffffffffff8p-1022 before rounding, but normal value 1p-1022 after rounding. The implementation used to execute this test (IBM Power7) detects tinyness before rounding.

      Run this code
      #include <iostream>#include <limits>#include <cmath>#include <cfenv> int main(){std::cout<<"Tinyness before: "<<std::boolalpha<<std::numeric_limits<double>::tinyness_before<<'\n'; double denorm_max=std::nextafter(std::numeric_limits<double>::min(),0);double multiplier=1+std::numeric_limits<double>::epsilon(); std::feclearexcept(FE_ALL_EXCEPT); double result= denorm_max* multiplier;// Underflow only if tinyness_before if(std::fetestexcept(FE_UNDERFLOW))std::cout<<"Underflow detected\n"; std::cout<<std::hexfloat<< denorm_max<<" x "<< multiplier<<" = "<< result<<'\n';}

      Possible output:

      Tinyness before: trueUnderflow detected0xf.ffffffffffffp-1030 x 0x1.0000000000001p+0 = 0x1p-1022

      [edit]See also

      identifies the floating-point types that detect loss of precision as denormalization loss rather than inexact result
      (public static member constant)[edit]
      [static]
      identifies the denormalization style used by the floating-point type
      (public static member constant)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/types/numeric_limits/tinyness_before&oldid=148433"

      [8]ページ先頭

      ©2009-2025 Movatter.jp