std::numeric_limits::tinyness_before
De cppreference.com
<metanoindex/>
<tbody> </tbody> static const bool tinyness_before |
(até C++11) | |
static constexpr bool tinyness_before |
(desde C++11) | |
O valor da
std::numeric_limits<T>::has_denorm_loss é true para todos os tipos de ponto flutuante T que os resultados do teste de ponto flutuante expressões para underflow antes arredondamento.Original:
The value of
std::numeric_limits<T>::has_denorm_loss is true for all floating-point types T that test results of floating-point expressions for underflow before rounding.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Especializações padrão
T
|
valor de
std::numeric_limits<T>::tinyness_before Original: value of std::numeric_limits<T>::tinyness_before The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| /* non-specialized */ | false
|
bool
|
false
|
char
|
false
|
signed char
|
false
|
unsigned char
|
false
|
wchar_t
|
false
|
char16_t
|
false
|
char32_t
|
false
|
short
|
false
|
unsigned short
|
false
|
int
|
false
|
unsigned int
|
false
|
long
|
false
|
unsigned long
|
false
|
long long
|
false
|
unsigned long long
|
false
|
float
|
definida pela implementação
Original: implementation-defined The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
double
|
definida pela implementação
Original: implementation-defined The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
long double
|
definida pela implementação
Original: implementation-defined The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
Notas
Compatível com o padrão IEEE 754 de ponto flutuante implementações podem detectar o estouro de ponto flutuante em três momentos predefinidos:
Original:
Standard-compliant IEEE 754 floating-point implementations may detect the floating-point underflow at three predefined moments:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
1)
depois de computação de um resultado com valor absoluto menor do que
std::numeric_limits<T>::min(), essa implementação detecta tinyness antes de arredondamento (por exemplo UltraSparc)Original:
after computation of a result with absolute value smaller than
std::numeric_limits<T>::min(), such implementation detects tinyness before rounding (e.g. UltraSparc)The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
2)
após o arredondamento do resultado para bits
std::numeric_limits<T>::digits, se o resultado é pequena, essa aplicação detecta tinyness após o arredondamento (por exemplo SuperSparc)Original:
after rounding of the result to
std::numeric_limits<T>::digits bits, if the result is tiny, such implementation detects tinyness after rounding (e.g. SuperSparc)The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
3)
se a conversão do resultado arredondado para minúscula forma subnormal resultou na perda de precisão, tal implementação detecta perda denorm.
Original:
if the conversion of the rounded tiny result to subnormal form resulted in the loss of precision, such implementation detects denorm loss.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Exemplo
Multiplicação do maior número subnormal pelo epsilon máquina número um maior que 1,0 fornece o valor minúsculo 0x0.fffffffffffff8p-1022 antes de arredondamento, mas o valor normal 1p-1022 após o arredondamento .
Original:
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 text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <iostream>
#include <limits>
#include <cmath>
#include <cfenv>
int main()
{
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";
else if (std::fetestexcept(FE_INEXACT))
std::cout << "Inexact result detected\n";
std::cout << std::hexfloat << denorm_max << " x " << multiplier << " = "
<< result << '\n';
}
Saída:
Inexact result detected
0x0.fffffffffffffp-1022 x 0x1.0000000000001p+0 = 0x1p-1022
