std::numeric_limits<T>::has_denorm_loss
static const bool has_denorm_loss; | (до C++11) | |
static constexpr bool has_denorm_loss; | (с C++11) (устарело в C++23) |
Значение std::numeric_limits<T>::has_denorm_loss равно true для всех типов с плавающей точкой T, которые обнаруживают потерю точности при создании числа с пониженной значимостью как потерю денормализации, а не как неточное значение (см. ниже).
Стандартные специализации
T | значение std::numeric_limits<T>::has_denorm_loss |
|---|---|
| /* неспециализированный */ | 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 | определяется реализацией |
| double | определяется реализацией |
| long double | определяется реализацией |
Примечания
Стандартные реализации IEEE 754 с плавающей точкой для чисел с пониженной значимостью должны обнаруживать потерю точности, связанную с созданием такого числа, если это происходит, и могут делать это двумя различными способами:
- Потеря денормализации: полученный результат отличается от того, что был бы вычислен, если бы диапазон показателей был неограниченным.
- Неточный результат: полученный результат отличается от того, что был бы вычислен, если бы диапазон показателей и точность были неограниченными.
Ни одна реализация механизма потери денормализации не существует (потеря точности обнаруживается после округления, как неточный результат), и этот вариант был удален в пересмотре IEEE Std 754 2008 года.
libstdc++, libc++, libCstd и stlport4 определяют эту константу как false для всех типов с плавающей точкой. Microsoft Visual Studio определяет ее как true для всех типов с плавающей точкой.
Как и при любых вычислениях с плавающей точкой, потеря точности может вызвать FE_INEXACT.
Пример
См. также
|
[static] | определяет типы с плавающей точкой, которые обнаруживают малые значения до округления (общедоступная статическая константа) |
|
[static] | определяет стиль денормализации, используемый типом с плавающей точкой (общедоступная статическая константа) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/numeric_limits/has_denorm_loss