Класс numeric_limits
Шаблон класса описывает арифметические свойства встроенных числовых типов.
Синтаксис
template <class Type>
class numeric_limits
Параметры
Тип
Базовый тип данных элемента, свойства которого проверяются, запрашиваются или устанавливаются. Тип также можно объявить const
или volatile
const volatile
.
Замечания
Заголовок определяет явные специализации для типов wchar_t
, long double
bool
int
unsigned short
unsigned int
short
long
unsigned char
unsigned long
float
signed char
char
long long
unsigned long long
double
char16_t
и .char32_t
Для этих явных специализаций член numeric_limits::is_specialized является true
, а все соответствующие элементы имеют значимые значения. Программа может предоставлять дополнительные явные специализации. Большинство функций — членов класса описывают или проверяют возможные реализации float
.
Для произвольной специализации у членов нет значимых значений. Объект-член, у которого нет значимых значений, сохраняет ноль (или false
), а функция-член, не возвращающая значимое значение, возвращает Type(0)
.
Статические функции и константы
Имя | Описание |
---|---|
denorm_min | Возвращает наименьшее ненулевое денормализованное значение. |
digits | Возвращает количество цифр основания системы счисления, которое тип может представлять без потери точности. |
digits10 | Возвращает количество дробных десятичных цифр, которое тип может представлять без потери точности. |
epsilon | Возвращает разницу между 1 и наименьшим значением больше 1, которое этот тип данных может представлять. |
has_denorm | Проверяет, допускает ли тип денормализованные значения. |
has_denorm_loss | Проверяет, обнаружена ли потеря точности как потеря денормализации, а не неточный результат. |
has_infinity | Проверяет, может ли тип представлять положительную бесконечность. |
has_quiet_NaN | Проверяет, имеет ли тип представление для тихого не числа (NAN), который не сигнализирует. |
has_signaling_NaN | Проверяет, может ли тип представлять сообщения об обнаружении нечисла (NAN). |
infinity | Представление положительной бесконечности для типа, если доступно. |
is_bounded | Проверяет, конечен ли набор значений, представляемый типом. |
is_exact | Проверяет, не содержат ли вычисления с типом ошибок округления. |
is_iec559 | Проверяет, соответствует ли тип стандартам IEC 559. |
is_integer | Проверяет, может ли тип представлять целые числа. |
is_modulo | Проверяет, может ли тип представлять модуль. |
is_signed | Проверяет, может ли тип представлять числа со знаком. |
is_specialized | Проверяет, имеет ли тип явную специализацию, определенную в шаблоне numeric_limits класса. |
lowest | Возвращает наибольшее отрицательное конечное значение. |
max | Возвращает максимальное конечное значение типа. |
max_digits10 | Возвращает количество цифр дробной части, необходимых, чтобы у двух различных значений типа были уникальные десятичные представления. |
max_exponent | Возвращает максимальную положительную целую степень, которую тип с плавающей запятой может представить как конечное значение при возведении основания системы счисления в эту степень. |
max_exponent10 | Возвращает максимальную положительную целую степень, которую тип с плавающей запятой может представить как конечное значение при возведении десяти в эту степень. |
min | Возвращает минимальное нормализованное значение для типа. |
min_exponent | Возвращает максимальную отрицательную целую степень, которую тип с плавающей запятой может представить как конечное значение при возведении основания системы счисления в эту степень. |
min_exponent10 | Возвращает максимальную отрицательную целую степень, которую тип с плавающей запятой может представить как конечное значение при возведении десяти в эту степень. |
quiet_NaN | Возвращает представление "тихого" нечисла (NAN) для типа. |
radix | Возвращает целочисленное основание системы счисления, используемое для представления типа. |
round_error | Возвращает максимальную ошибку округления для типа. |
round_style | Возвращает значение, описывающее различные методы, которые могут быть выбраны реализацией для округления значения с плавающей запятой до целочисленного. |
signaling_NaN | Возвращает представление обозначения нечисла (NAN) для типа. |
tinyness_before | Проверяет, может ли тип определить, что значение слишком мало для представления в качестве нормализованного значения, до его округления. |
traps | Проверяет, реализованы ли для типа исключения при выполнении арифметических операций. |
denorm_min
Возвращает наименьшее ненулевое денормализованное значение.
static constexpr Type denorm_min() throw();
Возвращаемое значение
Наименьшее ненулевое денормализованное значение.
Замечания
long double
совпадает с double
компилятором C++.
Функция возвращает минимальное значение для типа, которое совпадает с минимальной, если has_denorm не равноdenorm_present
.
Пример
// numeric_limits_denorm_min.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "The smallest nonzero denormalized value" << endl
<< "for float objects is: "
<< numeric_limits<float>::denorm_min( ) << endl;
cout << "The smallest nonzero denormalized value" << endl
<< "for double objects is: "
<< numeric_limits<double>::denorm_min( ) << endl;
cout << "The smallest nonzero denormalized value" << endl
<< "for long double objects is: "
<< numeric_limits<long double>::denorm_min( ) << endl;
// A smaller value will round to zero
cout << numeric_limits<float>::denorm_min( )/2 <<endl;
cout << numeric_limits<double>::denorm_min( )/2 <<endl;
cout << numeric_limits<long double>::denorm_min( )/2 <<endl;
}
The smallest nonzero denormalized value
for float objects is: 1.4013e-045
The smallest nonzero denormalized value
for double objects is: 4.94066e-324
The smallest nonzero denormalized value
for long double objects is: 4.94066e-324
0
0
0
digits
Возвращает количество цифр основания системы счисления, которое тип может представлять без потери точности.
static constexpr int digits = 0;
Возвращаемое значение
Количество цифр основания системы счисления, которое тип может представлять без потери точности.
Замечания
Член сохраняет количество цифр основания системы счисления, которое тип может представлять без изменения, то есть количество бит (кроме бита знака) для предопределенного целочисленного типа, либо количество цифр мантиссы для предопределенного типа числа с плавающей запятой.
Пример
// numeric_limits_digits_min.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << numeric_limits<float>::digits <<endl;
cout << numeric_limits<double>::digits <<endl;
cout << numeric_limits<long double>::digits <<endl;
cout << numeric_limits<int>::digits <<endl;
cout << numeric_limits<__int64>::digits <<endl;
}
24
53
53
31
63
digits10
Возвращает количество дробных десятичных цифр, которое тип может представлять без потери точности.
static constexpr int digits10 = 0;
Возвращаемое значение
Количество дробных десятичных цифр, которое тип может представлять без потери точности.
Пример
// numeric_limits_digits10.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << numeric_limits<float>::digits10 <<endl;
cout << numeric_limits<double>::digits10 <<endl;
cout << numeric_limits<long double>::digits10 <<endl;
cout << numeric_limits<int>::digits10 <<endl;
cout << numeric_limits<__int64>::digits10 <<endl;
float f = (float)99999999;
cout.precision ( 10 );
cout << "The float is; " << f << endl;
}
6
15
15
9
18
The float is; 100000000
epsilon
Функция возвращает разницу между 1 и наименьшим значением больше 1, которое может быть представлено для типа данных.
static constexpr Type epsilon() throw();
Возвращаемое значение
Разница между 1 и наименьшим значением больше 1, которое может быть представлено для типа данных.
Замечания
Значение FLT_EPSILON для типа float
. epsilon
для типа — это наименьшее положительное число с плавающей запятой N, так что N + epsilon
+ N можно представить.
Пример
// numeric_limits_epsilon.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "The difference between 1 and the smallest "
<< "value greater than 1" << endl
<< "for float objects is: "
<< numeric_limits<float>::epsilon( ) << endl;
cout << "The difference between 1 and the smallest "
<< "value greater than 1" << endl
<< "for double objects is: "
<< numeric_limits<double>::epsilon( ) << endl;
cout << "The difference between 1 and the smallest "
<< "value greater than 1" << endl
<< "for long double objects is: "
<< numeric_limits<long double>::epsilon( ) << endl;
}
The difference between 1 and the smallest value greater than 1
for float objects is: 1.19209e-007
The difference between 1 and the smallest value greater than 1
for double objects is: 2.22045e-016
The difference between 1 and the smallest value greater than 1
for long double objects is: 2.22045e-016
has_denorm
Проверяет, допускает ли тип денормализованные значения.
static constexpr float_denorm_style has_denorm = denorm_absent;
Возвращаемое значение
Значение перечисления типа const float_denorm_style
, указывающее, допускает ли тип денормализованные значения.
Замечания
Член хранит denorm_present
тип с плавающей запятой, имеющий денормализованные значения, фактически переменное число экспонентных битов.
Пример
// numeric_limits_has_denorm.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "Whether float objects allow denormalized values: "
<< numeric_limits<float>::has_denorm
<< endl;
cout << "Whether double objects allow denormalized values: "
<< numeric_limits<double>::has_denorm
<< endl;
cout << "Whether long int objects allow denormalized values: "
<< numeric_limits<long int>::has_denorm
<< endl;
}
Whether float objects allow denormalized values: 1
Whether double objects allow denormalized values: 1
Whether long int objects allow denormalized values: 0
has_denorm_loss
Проверяет, обнаружена ли потеря точности как потеря денормализации, а не неточный результат.
static constexpr bool has_denorm_loss = false;
Возвращаемое значение
true
Значение , если потеря точности обнаружена как потеря денормализации; false
Если нет.
Замечания
Член сохраняет значение true для типа, который определяет была ли потеря точности связана с представлением в виде денормализованного результата (слишком маленькое для представления в виде нормализованного значения) или поскольку оно неточное (отличается от результата, не подверженного ограничениям диапазона экспоненты и точности), опция с представлениями IEC 559 с плавающей точкой, которые могут повлиять не некоторые результаты.
Пример
// numeric_limits_has_denorm_loss.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "Whether float objects can detect denormalized loss: "
<< numeric_limits<float>::has_denorm_loss
<< endl;
cout << "Whether double objects can detect denormalized loss: "
<< numeric_limits<double>::has_denorm_loss
<< endl;
cout << "Whether long int objects can detect denormalized loss: "
<< numeric_limits<long int>::has_denorm_loss
<< endl;
}
Whether float objects can detect denormalized loss: 1
Whether double objects can detect denormalized loss: 1
Whether long int objects can detect denormalized loss: 0
has_infinity
Проверяет, может ли тип представлять положительную бесконечность.
static constexpr bool has_infinity = false;
Возвращаемое значение
true
Значение , если тип имеет представление для положительной бесконечности; false
Если нет.
Замечания
Элемент возвращается true
, если is_iec559 true
.
Пример
// numeric_limits_has_infinity.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "Whether float objects have infinity: "
<< numeric_limits<float>::has_infinity
<< endl;
cout << "Whether double objects have infinity: "
<< numeric_limits<double>::has_infinity
<< endl;
cout << "Whether long int objects have infinity: "
<< numeric_limits<long int>::has_infinity
<< endl;
}
Whether float objects have infinity: 1
Whether double objects have infinity: 1
Whether long int objects have infinity: 0
has_quiet_NaN
Проверяет, может ли тип представлять "тихое" нечисло (NAN), которое является несигнализирующим.
static constexpr bool has_quiet_NaN = false;
Возвращаемое значение
true
Значение , если тип имеет представление для тихой NAN; false
если нет.
Замечания
"Тихое" NAN — это кодирование для нечисла, которое не обозначает свое присутствие в выражении. Возвращаемое значение имеет true
значение, если is_iec559 имеет значение true.
Пример
// numeric_limits_has_quiet_nan.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "Whether float objects have quiet_NaN: "
<< numeric_limits<float>::has_quiet_NaN
<< endl;
cout << "Whether double objects have quiet_NaN: "
<< numeric_limits<double>::has_quiet_NaN
<< endl;
cout << "Whether long int objects have quiet_NaN: "
<< numeric_limits<long int>::has_quiet_NaN
<< endl;
}
Whether float objects have quiet_NaN: 1
Whether double objects have quiet_NaN: 1
Whether long int objects have quiet_NaN: 0
has_signaling_NaN
Проверяет, может ли тип представлять сообщения об обнаружении нечисла (NAN).
static constexpr bool has_signaling_NaN = false;
Возвращаемое значение
true
Значение , если тип имеет представление для сигнального NAN; false
Если нет.
Замечания
Сообщение о нечисле — это кодирование для нечисла, которое сообщает о его присутствии в выражении. Возвращаемое значение имеет true
значение, если is_iec559 имеет значение true.
Пример
// numeric_limits_has_signaling_nan.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "Whether float objects have a signaling_NaN: "
<< numeric_limits<float>::has_signaling_NaN
<< endl;
cout << "Whether double objects have a signaling_NaN: "
<< numeric_limits<double>::has_signaling_NaN
<< endl;
cout << "Whether long int objects have a signaling_NaN: "
<< numeric_limits<long int>::has_signaling_NaN
<< endl;
}
Whether float objects have a signaling_NaN: 1
Whether double objects have a signaling_NaN: 1
Whether long int objects have a signaling_NaN: 0
infinity
Представление положительной бесконечности для типа, если имеется.
static constexpr Type infinity() throw();
Возвращаемое значение
Представление положительной бесконечности для типа, если имеется.
Замечания
Возвращаемое значение имеет смысл только в том случае, если has_infinity true
.
Пример
// numeric_limits_infinity.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << numeric_limits<float>::has_infinity <<endl;
cout << numeric_limits<double>::has_infinity<<endl;
cout << numeric_limits<long double>::has_infinity <<endl;
cout << numeric_limits<int>::has_infinity <<endl;
cout << numeric_limits<__int64>::has_infinity <<endl;
cout << "The representation of infinity for type float is: "
<< numeric_limits<float>::infinity( ) <<endl;
cout << "The representation of infinity for type double is: "
<< numeric_limits<double>::infinity( ) <<endl;
cout << "The representation of infinity for type long double is: "
<< numeric_limits<long double>::infinity( ) <<endl;
}
1
1
1
0
0
The representation of infinity for type float is: inf
The representation of infinity for type double is: inf
The representation of infinity for type long double is: inf
is_bounded
Проверяет, конечен ли набор значений, представляемый типом.
static constexpr bool is_bounded = false;
Возвращаемое значение
true
Значение , если тип имеет ограниченный набор представленных значений; false
Если нет.
Замечания
Все предопределенные типы имеют ограниченный набор представленных значений и возвращаемых true
значений.
Пример
// numeric_limits_is_bounded.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "Whether float objects have bounded set "
<< "of representable values: "
<< numeric_limits<float>::is_bounded
<< endl;
cout << "Whether double objects have bounded set "
<< "of representable values: "
<< numeric_limits<double>::is_bounded
<< endl;
cout << "Whether long int objects have bounded set "
<< "of representable values: "
<< numeric_limits<long int>::is_bounded
<< endl;
cout << "Whether unsigned char objects have bounded set "
<< "of representable values: "
<< numeric_limits<unsigned char>::is_bounded
<< endl;
}
Whether float objects have bounded set of representable values: 1
Whether double objects have bounded set of representable values: 1
Whether long int objects have bounded set of representable values: 1
Whether unsigned char objects have bounded set of representable values: 1
is_exact
Проверяет, не содержат ли вычисления с типом ошибок округления.
static constexpr bool is_exact = false;
Возвращаемое значение
true
Значение , если вычисления не имеют ошибок округления; false
Если нет.
Замечания
Все предопределенные типы целых чисел имеют точное представление для их значений и возвращаемых false
значений. Вещественное представление или представление с фиксированной запятой также считается точным, но представление с плавающей точкой — нет.
Пример
// numeric_limits_is_exact.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "Whether float objects have calculations "
<< "free of rounding errors: "
<< numeric_limits<float>::is_exact
<< endl;
cout << "Whether double objects have calculations "
<< "free of rounding errors: "
<< numeric_limits<double>::is_exact
<< endl;
cout << "Whether long int objects have calculations "
<< "free of rounding errors: "
<< numeric_limits<long int>::is_exact
<< endl;
cout << "Whether unsigned char objects have calculations "
<< "free of rounding errors: "
<< numeric_limits<unsigned char>::is_exact
<< endl;
}
Whether float objects have calculations free of rounding errors: 0
Whether double objects have calculations free of rounding errors: 0
Whether long int objects have calculations free of rounding errors: 1
Whether unsigned char objects have calculations free of rounding errors: 1
is_iec559
Проверяет, соответствует ли тип стандартам IEC 559.
static constexpr bool is_iec559 = false;
Возвращаемое значение
true
, если тип соответствует стандартам IEC 559; false
Если нет.
Замечания
IEC 559 — это международный стандарт для представления значений с плавающей точкой, который также известен в США как IEEE 754.
Пример
// numeric_limits_is_iec559.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "Whether float objects conform to iec559 standards: "
<< numeric_limits<float>::is_iec559
<< endl;
cout << "Whether double objects conform to iec559 standards: "
<< numeric_limits<double>::is_iec559
<< endl;
cout << "Whether int objects conform to iec559 standards: "
<< numeric_limits<int>::is_iec559
<< endl;
cout << "Whether unsigned char objects conform to iec559 standards: "
<< numeric_limits<unsigned char>::is_iec559
<< endl;
}
Whether float objects conform to iec559 standards: 1
Whether double objects conform to iec559 standards: 1
Whether int objects conform to iec559 standards: 0
Whether unsigned char objects conform to iec559 standards: 0
is_integer
Проверяет, может ли тип представлять целые числа.
static constexpr bool is_integer = false;
Возвращаемое значение
true
Значение , если тип имеет целочисленное представление; false
Если нет.
Замечания
Все предопределенные целочисленные типы могут представлять целые числа.
Пример
// numeric_limits_is_integer.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "Whether float objects have an integral representation: "
<< numeric_limits<float>::is_integer
<< endl;
cout << "Whether double objects have an integral representation: "
<< numeric_limits<double>::is_integer
<< endl;
cout << "Whether int objects have an integral representation: "
<< numeric_limits<int>::is_integer
<< endl;
cout << "Whether unsigned char objects have an integral representation: "
<< numeric_limits<unsigned char>::is_integer
<< endl;
}
Whether float objects have an integral representation: 0
Whether double objects have an integral representation: 0
Whether int objects have an integral representation: 1
Whether unsigned char objects have an integral representation: 1
is_modulo
Проверяет, имеет ли тип type представление по модулю.
static constexpr bool is_modulo = false;
Возвращаемое значение
true
Значение , если тип имеет представление в модуле; false
Если нет.
Замечания
Представление по модулю — это представление, в котором все результаты уменьшены по модулю на некоторое значение. Все предопределенные целочисленные беззнаковые типы имеют представление по модулю.
Пример
// numeric_limits_is_modulo.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "Whether float objects have a modulo representation: "
<< numeric_limits<float>::is_modulo
<< endl;
cout << "Whether double objects have a modulo representation: "
<< numeric_limits<double>::is_modulo
<< endl;
cout << "Whether signed char objects have a modulo representation: "
<< numeric_limits<signed char>::is_modulo
<< endl;
cout << "Whether unsigned char objects have a modulo representation: "
<< numeric_limits<unsigned char>::is_modulo
<< endl;
}
Whether float objects have a modulo representation: 0
Whether double objects have a modulo representation: 0
Whether signed char objects have a modulo representation: 1
Whether unsigned char objects have a modulo representation: 1
is_signed
Проверяет, может ли тип представлять числа со знаком.
static constexpr bool is_signed = false;
Возвращаемое значение
true
Значение , если тип имеет подписанное представление; false
Если нет.
Замечания
Член хранит значение true для типа, который может представлять числа со знаком, что верно для всех предопределенных типов с плавающей точкой и целочисленных типов со знаком.
Пример
// numeric_limits_is_signaled.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "Whether float objects have a signed representation: "
<< numeric_limits<float>::is_signed
<< endl;
cout << "Whether double objects have a signed representation: "
<< numeric_limits<double>::is_signed
<< endl;
cout << "Whether signed char objects have a signed representation: "
<< numeric_limits<signed char>::is_signed
<< endl;
cout << "Whether unsigned char objects have a signed representation: "
<< numeric_limits<unsigned char>::is_signed
<< endl;
}
Whether float objects have a signed representation: 1
Whether double objects have a signed representation: 1
Whether signed char objects have a signed representation: 1
Whether unsigned char objects have a signed representation: 0
is_specialized
Проверяет, имеет ли тип явную специализацию, определенную в шаблоне numeric_limits
класса.
static constexpr bool is_specialized = false;
Возвращаемое значение
true
Значение , если тип имеет явную специализацию, определенную в шаблоне класса; false
Если нет.
Замечания
Все скалярные типы, отличные от указателей, имеют явную специализацию, определенную для шаблона numeric_limits
класса.
Пример
// numeric_limits_is_specialized.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "Whether float objects have an explicit "
<< "specialization in the class: "
<< numeric_limits<float>::is_specialized
<< endl;
cout << "Whether float* objects have an explicit "
<< "specialization in the class: "
<< numeric_limits<float*>::is_specialized
<< endl;
cout << "Whether int objects have an explicit "
<< "specialization in the class: "
<< numeric_limits<int>::is_specialized
<< endl;
cout << "Whether int* objects have an explicit "
<< "specialization in the class: "
<< numeric_limits<int*>::is_specialized
<< endl;
}
Whether float objects have an explicit specialization in the class: 1
Whether float* objects have an explicit specialization in the class: 0
Whether int objects have an explicit specialization in the class: 1
Whether int* objects have an explicit specialization in the class: 0
самый низкий
Возвращает наибольшее отрицательное конечное значение.
static constexpr Type lowest() throw();
Возвращаемое значение
Возвращает наибольшее отрицательное конечное значение.
Замечания
Возвращает наиболее отрицательное конечное значение для типа (для целочисленных типов это обычно min()
, а для типов с плавающей точкой — -max()
). Возвращаемое значение является содержательным, если is_bounded
имеет значение true
.
макс.
Возвращает максимальное конечное значение типа.
static constexpr Type max() throw();
Возвращаемое значение
Максимальное конечное значение для типа.
Замечания
Максимальное конечное значение — INT_MAX для типа и FLT_MAX для типа int
float
. Возвращаемое значение имеет смысл, если is_bounded true
.
Пример
// numeric_limits_max.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main() {
cout << "The maximum value for type float is: "
<< numeric_limits<float>::max( )
<< endl;
cout << "The maximum value for type double is: "
<< numeric_limits<double>::max( )
<< endl;
cout << "The maximum value for type int is: "
<< numeric_limits<int>::max( )
<< endl;
cout << "The maximum value for type short int is: "
<< numeric_limits<short int>::max( )
<< endl;
}
max_digits10
Возвращает количество цифр дробной части, необходимых, чтобы у двух различных значений типа были уникальные десятичные представления.
static constexpr int max_digits10 = 0;
Возвращаемое значение
Возвращает количество цифр дробной части, необходимых, чтобы у двух различных значений типа были уникальные десятичные представления.
Замечания
Этот член хранит количество цифр дробной части, необходимых, чтобы у двух различных значений типа были уникальные десятичные представления.
max_exponent
Возвращает максимальную положительную целую степень, которую тип с плавающей запятой может представить как конечное значение при возведении основания системы счисления в эту степень.
static constexpr int max_exponent = 0;
Возвращаемое значение
Максимальная целочисленная степень для основания системы счисления, представляемая типом.
Замечания
Возвращаемое значение функции-члена имеет смысл только для типов с плавающей запятой. Это max_exponent
значение, FLT_MAX_EXP для типа float
.
Пример
// numeric_limits_max_exponent.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "The maximum radix-based exponent for type float is: "
<< numeric_limits<float>::max_exponent
<< endl;
cout << "The maximum radix-based exponent for type double is: "
<< numeric_limits<double>::max_exponent
<< endl;
cout << "The maximum radix-based exponent for type long double is: "
<< numeric_limits<long double>::max_exponent
<< endl;
}
The maximum radix-based exponent for type float is: 128
The maximum radix-based exponent for type double is: 1024
The maximum radix-based exponent for type long double is: 1024
max_exponent10
Возвращает максимальную положительную целую степень, которую тип с плавающей запятой может представить как конечное значение при возведении десяти в эту степень.
static constexpr int max_exponent10 = 0;
Возвращаемое значение
Максимальная целочисленная степень основания 10, которую может представить этот тип.
Замечания
Возвращаемое значение функции-члена имеет смысл только для типов с плавающей запятой. Значение max_exponent
FLT_MAX_10 для типа float
.
Пример
// numeric_limits_max_exponent10.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "The maximum base 10 exponent for type float is: "
<< numeric_limits<float>::max_exponent10
<< endl;
cout << "The maximum base 10 exponent for type double is: "
<< numeric_limits<double>::max_exponent10
<< endl;
cout << "The maximum base 10 exponent for type long double is: "
<< numeric_limits<long double>::max_exponent10
<< endl;
}
The maximum base 10 exponent for type float is: 38
The maximum base 10 exponent for type double is: 308
The maximum base 10 exponent for type long double is: 308
мин
Возвращает минимальное нормализованное значение для типа.
static constexpr Type min() throw();
Возвращаемое значение
Минимальное нормализованное значение для типа.
Замечания
Минимальное нормализованное значение для типа int
— INT_MIN, а для типа float
— FLT_MIN. Возвращаемое значение имеет смысл, если is_bounded имеет значение true
или is_signed имеет значение false
.
Пример
// numeric_limits_min.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "The minimum value for type float is: "
<< numeric_limits<float>::min( )
<< endl;
cout << "The minimum value for type double is: "
<< numeric_limits<double>::min( )
<< endl;
cout << "The minimum value for type int is: "
<< numeric_limits<int>::min( )
<< endl;
cout << "The minimum value for type short int is: "
<< numeric_limits<short int>::min( )
<< endl;
}
The minimum value for type float is: 1.17549e-038
The minimum value for type double is: 2.22507e-308
The minimum value for type int is: -2147483648
The minimum value for type short int is: -32768
min_exponent
Возвращает максимальную отрицательную целую степень, которую тип с плавающей запятой может представить как конечное значение при возведении основания системы счисления в эту степень.
static constexpr int min_exponent = 0;
Возвращаемое значение
Минимальная целочисленная степень основания системы счисления, которую может представить тип.
Замечания
Функция-член имеет смысл только для типов с плавающей запятой. Значение min_exponent
FLT_MIN_EXP для типа float
.
Пример
// numeric_limits_min_exponent.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "The minimum radix-based exponent for type float is: "
<< numeric_limits<float>::min_exponent
<< endl;
cout << "The minimum radix-based exponent for type double is: "
<< numeric_limits<double>::min_exponent
<< endl;
cout << "The minimum radix-based exponent for type long double is: "
<< numeric_limits<long double>::min_exponent
<< endl;
}
The minimum radix-based exponent for type float is: -125
The minimum radix-based exponent for type double is: -1021
The minimum radix-based exponent for type long double is: -1021
min_exponent10
Возвращает максимальную отрицательную целую степень, которую тип с плавающей запятой может представить как конечное значение при возведении десяти в эту степень.
static constexpr int min_exponent10 = 0;
Возвращаемое значение
Минимальная целая степень числа 10, которую может представить тип.
Замечания
Функция-член имеет смысл только для типов с плавающей запятой. Значение min_exponent10
FLT_MIN_10_EXP для типа float
.
Пример
// numeric_limits_min_exponent10.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "The minimum base 10 exponent for type float is: "
<< numeric_limits<float>::min_exponent10
<< endl;
cout << "The minimum base 10 exponent for type double is: "
<< numeric_limits<double>::min_exponent10
<< endl;
cout << "The minimum base 10 exponent for type long double is: "
<< numeric_limits<long double>::min_exponent10
<< endl;
}
The minimum base 10 exponent for type float is: -37
The minimum base 10 exponent for type double is: -307
The minimum base 10 exponent for type long double is: -307
quiet_NaN
Возвращает представление "тихого" нечисла (NAN) для типа.
static constexpr Type quiet_NaN() throw();
Возвращаемое значение
Представление "тихого" нечисла (NAN) для типа.
Замечания
Возвращаемое значение имеет смысл только в том случае, если has_quiet_NaN true
.
Пример
// numeric_limits_quiet_nan.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "The quiet NaN for type float is: "
<< numeric_limits<float>::quiet_NaN( )
<< endl;
cout << "The quiet NaN for type int is: "
<< numeric_limits<int>::quiet_NaN( )
<< endl;
cout << "The quiet NaN for type long double is: "
<< numeric_limits<long double>::quiet_NaN( )
<< endl;
}
The quiet NaN for type float is: 1.#QNAN
The quiet NaN for type int is: 0
The quiet NaN for type long double is: 1.#QNAN
radix
Возвращает целочисленное основание системы счисления, используемое для представления типа.
static constexpr int radix = 0;
Возвращаемое значение
Целочисленная база для представления типа.
Замечания
Для предопределенных целочисленных типов база — 2, а для предопределенных типов с плавающей запятой — база, в которую можно возвести степень, или FLT_RADIX.
Пример
// numeric_limits_radix.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "The base for type float is: "
<< numeric_limits<float>::radix
<< endl;
cout << "The base for type int is: "
<< numeric_limits<int>::radix
<< endl;
cout << "The base for type long double is: "
<< numeric_limits<long double>::radix
<< endl;
}
The base for type float is: 2
The base for type int is: 2
The base for type long double is: 2
round_error
Возвращает максимальную ошибку округления для типа.
static constexpr Type round_error() throw();
Возвращаемое значение
Максимальная ошибка округления для типа.
Пример
// numeric_limits_round_error.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "The maximum rounding error for type float is: "
<< numeric_limits<float>::round_error( )
<< endl;
cout << "The maximum rounding error for type int is: "
<< numeric_limits<int>::round_error( )
<< endl;
cout << "The maximum rounding error for type long double is: "
<< numeric_limits<long double>::round_error( )
<< endl;
}
The maximum rounding error for type float is: 0.5
The maximum rounding error for type int is: 0
The maximum rounding error for type long double is: 0.5
round_style
Возвращает значение, описывающее различные методы, которые могут быть выбраны реализацией для округления значения с плавающей запятой до целочисленного.
static constexpr float_round_style round_style = round_toward_zero;
Возвращаемое значение
Значение из перечисления float_round_style
, которое описывает тип округления.
Замечания
Член хранит значение, которое описывает различные методы, из которых реализация может выбирать для округления значения с плавающей точкой до целого значения.
Метод округления жестко закодирован в реализации, поэтому даже если программа запускается с другим методом округления, это значение не изменится.
Пример
// numeric_limits_round_style.cpp
// compile with: /EHsc
#include <iostream>
#include <float.h>
#include <limits>
using namespace std;
int main( )
{
cout << "The rounding style for a double type is: "
<< numeric_limits<double>::round_style << endl;
_controlfp_s(NULL,_RC_DOWN,_MCW_RC );
cout << "The rounding style for a double type is now: "
<< numeric_limits<double>::round_style << endl;
cout << "The rounding style for an int type is: "
<< numeric_limits<int>::round_style << endl;
}
The rounding style for a double type is: 1
The rounding style for a double type is now: 1
The rounding style for an int type is: 0
signaling_NaN
Возвращает представление обозначения нечисла (NAN) для типа.
static constexpr Type signaling_NaN() throw();
Возвращаемое значение
Представление сообщения о нечисле (NAN) для типа.
Замечания
Возвращаемое значение имеет смысл только в том случае, если has_signaling_NaN true
.
Пример
// numeric_limits_signaling_nan.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "The signaling NaN for type float is: "
<< numeric_limits<float>::signaling_NaN( )
<< endl;
cout << "The signaling NaN for type int is: "
<< numeric_limits<int>::signaling_NaN( )
<< endl;
cout << "The signaling NaN for type long double is: "
<< numeric_limits<long double>::signaling_NaN( )
<< endl;
}
tinyness_before
Проверяет, может ли тип определить, что значение слишком мало для представления в качестве нормализованного значения, до его округления.
static constexpr bool tinyness_before = false;
Возвращаемое значение
true
, если тип перед округлением может определить, что значение слишком мало; в противном случае false
.
Замечания
Типы, которые могут распознавать слишком малые значения, были включены в представления IEC 559 с плавающей запятой в качестве опции и их реализация может влиять на некоторые результаты.
Пример
// numeric_limits_tinyness_before.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "Whether float types can detect tinyness before rounding: "
<< numeric_limits<float>::tinyness_before
<< endl;
cout << "Whether double types can detect tinyness before rounding: "
<< numeric_limits<double>::tinyness_before
<< endl;
cout << "Whether long int types can detect tinyness before rounding: "
<< numeric_limits<long int>::tinyness_before
<< endl;
cout << "Whether unsigned char types can detect tinyness before rounding: "
<< numeric_limits<unsigned char>::tinyness_before
<< endl;
}
Whether float types can detect tinyness before rounding: 1
Whether double types can detect tinyness before rounding: 1
Whether long int types can detect tinyness before rounding: 0
Whether unsigned char types can detect tinyness before rounding: 0
traps
Проверяет, реализованы ли для типа исключения при выполнении арифметических операций.
static constexpr bool traps = false;
Возвращаемое значение
true
Значение , если перехват реализуется для типа; false
Если это не так.
Пример
// numeric_limits_traps.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
int main( )
{
cout << "Whether float types have implemented trapping: "
<< numeric_limits<float>::traps
<< endl;
cout << "Whether double types have implemented trapping: "
<< numeric_limits<double>::traps
<< endl;
cout << "Whether long int types have implemented trapping: "
<< numeric_limits<long int>::traps
<< endl;
cout << "Whether unsigned char types have implemented trapping: "
<< numeric_limits<unsigned char>::traps
<< endl;
}
Whether float types have implemented trapping: 1
Whether double types have implemented trapping: 1
Whether long int types have implemented trapping: 0
Whether unsigned char types have implemented trapping: 0