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 |
|---|---|
| /* non-specialized */ |
false |
| bool |
false |
| char |
false |
| signedchar |
false |
| unsignedchar |
false |
| wchar_t |
false |
| char8_t (начиная с C++20) |
false |
| char16_t (начиная с C++11) |
false |
| char32_t (начиная с C++11) |
false |
| short |
false |
| unsignedshort |
false |
| int |
false |
| unsignedint |
false |
| long |
false |
| unsignedlong |
false |
| longlong (начиная с C++11) |
false |
| unsignedlonglong (начиная с C++11) |
false |
| float | определяется реализацией |
| double | определяется реализацией |
| longdouble | определяется реализацией |
Примечания
В соответствующих стандарту 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/cpp/types/numeric_limits/has_denorm_loss