std::numeric_limits<T>::lowest
static constexpr T lowest() noexcept; | (начиная с C++11) |
Возвращает наименьшее конечное значение, представимое числовым типом T, то есть конечное значение x, для которого не существует другого конечного значения y, где y < x. Для типов с плавающей точкой это отличается от std::numeric_limits<T>::min(). Имеет смысл только для типов с ограниченным диапазоном.
Возвращаемое значение
T |
std::numeric_limits<T>::lowest() |
|---|---|
| /* non-specialized */ |
T() |
| bool |
false |
| char |
CHAR_MIN |
| signedchar |
SCHAR_MIN |
| unsignedchar |
0 |
| wchar_t |
WCHAR_MIN |
| char8_t (начиная с C++20) |
0 |
| char16_t |
0 |
| char32_t |
0 |
| short |
SHRT_MIN |
| unsignedshort |
0 |
| int |
INT_MIN |
| unsignedint |
0 |
| long |
LONG_MIN |
| unsignedlong |
0 |
| longlong |
LLONG_MIN |
| unsignedlonglong |
0 |
| float |
-FLT_MAX |
| double |
-DBL_MAX |
| longdouble |
-LDBL_MAX |
Примечания
Для каждого стандартного типа C++ с плавающей точкой T std::numeric_limits<T>::lowest() == -std::numeric_limits<T>::max(), однако для специализаций сторонних разработчиков это не обязательно так.
Пример
Демонстрирует min(), max() и lowest() для типов с плавающей точкой:
#include <iostream>
#include <limits>
#include <string_view>
template<typename T>
void print_twice(std::string_view type, T value)
{
std::cout << '\t' << type << ": "
<< std::defaultfloat << value << " or "
<< std::hexfloat << value << '\n';
}
int main()
{
// min()
std::cout << "std::numeric_limits<T>::min():\n";
print_twice("float", std::numeric_limits<float>::min());
print_twice("double", std::numeric_limits<double>::min());
print_twice("long double", std::numeric_limits<long double>::min());
// lowest()
std::cout << "std::numeric_limits<T>::lowest():\n";
print_twice("float", std::numeric_limits<float>::lowest());
print_twice("double", std::numeric_limits<double>::lowest());
print_twice("long double", std::numeric_limits<long double>::lowest());
// max()
std::cout << "std::numeric_limits<T>::max():\n";
print_twice("float", std::numeric_limits<float>::max());
print_twice("double", std::numeric_limits<double>::max());
print_twice("long double", std::numeric_limits<long double>::max());
}
Вывод:
std::numeric_limits<T>::min():
float: 1.17549e-38 or 0x1p-126
double: 2.22507e-308 or 0x1p-1022
long double: 3.3621e-4932 or 0x8p-16385
std::numeric_limits<T>::lowest():
float: -3.40282e+38 or -0x1.fffffep+127
double: -1.79769e+308 or -0x1.fffffffffffffp+1023
long double: -1.18973e+4932 or -0xf.fffffffffffffffp+16380
std::numeric_limits<T>::max():
float: 3.40282e+38 or 0x1.fffffep+127
double: 1.79769e+308 or 0x1.fffffffffffffp+1023
long double: 1.18973e+4932 or 0xf.fffffffffffffffp+16380
См. также
|
[static] | возвращает наименьшее конечное значение заданного типа, не являющегося типом с плавающей точкой, или наименьшее положительное нормальное значение заданного типа с плавающей точкой (общедоступная статическая функция-член) |
|
[static] | возвращает наименьшее положительное субнормальное значение заданного типа с плавающей точкой (общедоступная статическая функция-член) |
|
[static] | возвращает наибольшее конечное значение заданного типа (общедоступная статическая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/types/numeric_limits/lowest