Диапазон хранения значений

Автор: | 18 декабря, 2021

Для получения максимального и минимального значения мы запросим их через

std::numeric_limits  — которая обеспечивает стандартизированный способ запроса различных свойств арифметических типов. К таким данным можно отнести:

numeric_limits<bool>
numeric_limits<signed char>
numeric_limits<unsigned char>
numeric_limits<wchar_t>
numeric_limits<char16_t>
numeric_limits<char32_t>
numeric_limits<short>
numeric_limits<unsigned short>
numeric_limits<int>
numeric_limits<unsigned int>
numeric_limits<long>
numeric_limits<unsigned long>
numeric_limits<long long>
numeric_limits<unsigned long long>
numeric_limits<float>
numeric_limits<double>
numeric_limits<qint64>
numeric_limits<quint64>
numeric_limits<qint8>
numeric_limits<qint16>
numeric_limits<qint32>

Получаем следующий вывод через qDebug:

9223372036854775807  qint64
-9223372036854775808  qint64

18446744073709551615  quint64
0  quint64

127  qint8
-128  qint8

32767  qint16
-32768  qint16

2147483647  qint32
-2147483648  qint32

true  bool
false  bool

127  signed char
-128  signed char

255  unsigned char
0  unsigned char

65535  wchar_t
0  wchar_t

'\uffff'  char16_t
'\x0'  char16_t

'\Uffffffff'  char32_t
'\x0'  char32_t

32767  short
-32768  short

65535  unsigned short
0  unsigned short

2147483647  int
-2147483648  int

4294967295  unsigned int
0  unsigned int

2147483647  long
-2147483648  long

4294967295  unsigned long
0  unsigned long

9223372036854775807  long long
-9223372036854775808  long long

18446744073709551615  unsigned long long
0  unsigned long long

3.40282e+38  float
1.17549e-38  float

1.79769e+308  double
2.22507e-308  double

Как видим переменные типа float и double не совсем читабельно вывелись. Внесем изменения.

qDebug() << QString::number(std::numeric_limits<float>::max(),'f',38)
 << " float";
qDebug() << QString::number(std::numeric_limits<float>::min(),'f',38)
 << " float";

qDebug() << QString::number(std::numeric_limits<double>::max(),'f',308)
 << " double";
qDebug() << QString::number(std::numeric_limits<double>::min(),'f',308)
 << " double";

// И получим следующий вывод

"340282346638528859811704183484516925440.00000000000000000000000000000
000000000"  float
"0.00000000000000000000000000000000000001"  float

"179769313486231570814527423731704356798070567525844996598917476803157
2607800285387605895586327668781715404589535143824642343213268894641827
6846754670353751698604991057655128207624549009038932894407586850845513
3942304583236903222948165808559332123348274797826204144723168738177180
919299881250404026184124858368.000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000"  double

"0.0000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000002"  double