std::numeric_limits::tinyness_before
Материал из cppreference.com
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
<metanoindex/>
<tbody> </tbody> static const bool tinyness_before |
(до C++11) | |
static constexpr bool tinyness_before |
(начиная с C++11) | |
Значение
std::numeric_limits<T>::has_denorm_loss является true для всех типов с плавающей запятой T, что результаты тестов с плавающей точкой выражения для нижнего до округления.Оригинал:
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.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Стандартный специализации
T
|
Значение
std::numeric_limits<T>::tinyness_before Оригинал: value of std::numeric_limits<T>::tinyness_before Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| /* 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
|
реализации
Оригинал: implementation-defined Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
double
|
реализации
Оригинал: implementation-defined Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
long double
|
реализации
Оригинал: implementation-defined Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
Заметки
Стандартные-совместимый IEEE 754 с плавающей точкой реализации могут обнаружить с плавающей точкой нижнего на трех предопределенных моментов
Оригинал:
Standard-compliant IEEE 754 floating-point implementations may detect the floating-point underflow at three predefined moments:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
1)
После вычисления результата с абсолютной величине меньше, чем
std::numeric_limits<T>::min(), такая реализация обнаруживает tinyness до округления (например, UltraSparc)Оригинал:
after computation of a result with absolute value smaller than
std::numeric_limits<T>::min(), such implementation detects tinyness before rounding (e.g. UltraSparc)Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
2)
После округления результата
std::numeric_limits<T>::digits биты, если результатом является крошечной, такой реализации обнаруживает tinyness после округления (например, SuperSparc)Оригинал:
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)Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
3)
Если преобразование крошечные округлые результат субнормальных форме привело к потере точности, такая реализация обнаруживает потерю denorm.
Оригинал:
if the conversion of the rounded tiny result to subnormal form resulted in the loss of precision, such implementation detects denorm loss.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Пример
Умножение из крупнейших субнормальных число на количество одну машину эпсилон больше, чем 1,0 дает значение крошечные 0x0.fffffffffffff8p-1022 до округления, но нормальное значение 1p-1022 после округления .
Оригинал:
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.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Запустить этот код
#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';
}
Вывод:
Inexact result detected
0x0.fffffffffffffp-1022 x 0x1.0000000000001p+0 = 0x1p-1022
См. также
[static] |
определяет типы с плавающей запятой, которые обнаруживают потерю точности как потерю денормализации, а не неточный результат (public static константа-элемент) |
[static] |
определяет стиль денормализации, используемый типом с плавающей запятой (public static константа-элемент) |