GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::numeric_limits::tinyness_before(3) C++ Standard Libary std::numeric_limits::tinyness_before(3)

std::numeric_limits::tinyness_before - std::numeric_limits::tinyness_before


static const bool tinyness_before; (until C++11)
static constexpr bool tinyness_before; (since C++11)


The value of std::numeric_limits<T>::tinyness_before is true for all floating-point
types T that test results of floating-point expressions for underflow before
rounding.


T value of std::numeric_limits<T>::tinyness_before
/* non-specialized */ false
bool false
char false
signed char false
unsigned char false
wchar_t false
char8_t (C++20) false
char16_t (C++11) false
char32_t (C++11) false
short false
unsigned short false
int false
unsigned int false
long false
unsigned long false
long long (C++11) false
unsigned long long (C++11) false
float implementation-defined
double implementation-defined
long double implementation-defined


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 (and FE_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 than std::numeric_limits<T>::min(). Such
implementation detects tinyness before rounding (e.g. UltraSparc, POWER).
2. Underflow occurs (and FE_UNDERFLOW may be raised) if after the rounding of the
result to the target floating-point type (that is, rounding to
std::numeric_limits<T>::digits bits), the result's absolute value is smaller
than std::numeric_limits<T>::min(). Formally, the absolute value of a nonzero
result computed as though the exponent range were unbounded is smaller than
std::numeric_limits<T>::min(). Such implementation detects tinyness after
rounding (e.g. SuperSparc)


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';
}


Tinyness before: true
Underflow detected
0xf.ffffffffffffp-1030 x 0x1.0000000000001p+0 = 0x1p-1022


has_denorm_loss identifies the floating-point types that detect loss of precision as
[static] denormalization loss rather than inexact result
(public static member constant)
has_denorm identifies the denormalization style used by the floating-point type
[static] (public static member constant)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.