Полезные
константы
STL имеет много
полезных констант. Проверьте свои знания основ информатики. Знаете ли вы смысл
констант, приведенных ниже? Для их использования вам потребуется подключить
такие файлы заголовков:
#include
<limits>
#include
<climits>
#finclude
<cfloat>
#finclude
<numeric>
Вот фрагмент,
который выводит некоторые из констант и по-английски описывает их смысл. Русский
язык отказывается работать на моем компьютере в окне консольного приложения.
Думаю, что существуют программисты, которые зарабатывают свой хлеб, имея смутное
представление о существовании этих констант:
//=====
Сначала простые, которые знают все
cout
« "\n Is a char signed? "
«
numeric_limits<char>::is_signed;
cout
« "\n The minimum value for char is: "
«
(int)numeric_limits<char>::min();
cout
« "\n The maximum value for char is: "
«
(int)numeric_limits<char>::max();
cout
« "\n The minimum value for int is: "
«
numeric_limits<int>::min();
cout
« "\n The maximum value for int is: "
«
numeric_limits<int>::max();
cout
« "\n Is a integer an integer? "
«
numeric_limits<int>::is_integer;
cout
« "\n Is a float an integer? "
«
numeric_limits<float>::is_integer;
cout
« "\n Is a integer exact? "
«
numeric_limits<int>::is_exact;
cout
« "\n Is a float exact? "
«
numeric_limits<float>::is_exact;
//=====
Теперь более сложные
cout
« "\n Number of bits in mantissa (double) : "
«
DBL_MANT_DIG; cout « "\n Number of bits in mantissa (float): "
«
FLT_MANT_DIG;
cout
<<"\n The number of digits representble " "in base 10 for float is "
«
numeric_limits<float>::digitslO;
cout
« "\n The radix for float is: "
«
numeric_limits<float>::radix;
cout
« "\n The epsilon for float is: "
«
numeric_limits<float>::epsilon() ;
cout
« "\n The round error for float is: "
«
numeric_limits<float>::round_error();
cout
« "\n The minimum exponent for float is: "
«
numeric_limits<float>::min_exponent;
cout
« "\n The minimum exponent in base 10: "
«
numeric_limits<float>::min_exponentlO;
cout
« "\n The maximum exponent is: "
«
numeric_limits<float>::max_exponent;
cout
« "\n The maximum exponent in base 10: "
«
numeric_limits<float>::max_exponentlO;
cout
« "\n Can float represent positive infinity? "
«
numeric_limits<float>::has_infinity;
cout
« "\n Can double represent positive infinity? "
«
numeric_limits<double>::has_infinity;
cout
« "\n Can int represent positive infinity? "
«
numeric_limits<int>::has_infinity;
cout
« "\n Can float represent a NaN? "
«
numeric_limits<float>::has_quiet_NaN;
cout
« "\n Can float represent a signaling NaN? "
«
numeric_limits<float>::has_signaling_NaN;
//=====
Теперь еще более сложные
cout
« "\n Does float allow denormalized values? "
«
numeric_limits<float>::has_denorm;
cout
« "\n Does float detect denormalization loss? "
«
numeric_limits<float>::has_denorm_loss;
cout
« "\n Representation of positive infinity for"
"
float: "« numeric_limits<float>::infinity();
cout
« "\n Representation of quiet NaN for float: "
«
numeric_limits<float>::quiet_NaN();
cout
« "\n Minimum denormalized number for float: "
«
numeric_limits<float>::denorm_min();
cout
« "\n Minimum positive denormalized value for"
"
float " « numeric_limits<float>::denorm_min();
cout
« "\n Does float adhere to IEC 559 standard? "
«
numeric_limits<float>::is_iec559; cout « "\n Is float bounded? "
«
numeric_limits<float>::is_bounded;
cout
« "\n Is float modulo? "
«
numeric_limits<float>::is_modulo;
cout
« "\n is int modulo? "
«
numeric_limits<float>::is_modulo;
cout
« "\n Is trapping implemented for float? "
«
numeric_limits<float>::traps;
cout
« "\n Is tinyness detected before rounding? "
«
numeric_limits<float>::tinyness_before;
cout
« "\n What is the rounding style for float? "
«
(int)numeric_limits<float>::round_style;
cout
« "\n What is the rounding style for int? "
«
(int)numeric_limits<int>::round_style;
//=====
Теперь из другой оперы
cout
« "\n Floating digits " « FLT_DIG;
cout
« "\n Smallest such that 1.0+DBL_EPSILON !=1.0: "
«
DBL_EPSILON;
cout
« "\n LDBL_MIN_EXP: " « LDBL_MIN_EXP;
cout
« "\n LDBL_EPSILON: " « LDBL_EPSILON;
cout
« "\n Exponent radix: " « _DBL_RADIX;
Незнание констант
типа DBL_EPSILON или DBL_MANT_DIG довольно сильно ограничивает квалификацию
программиста, поэтому советую внимательно исследовать вывод, производимый данным
фрагментом, и, возможно, обратиться к специальным изданиям по архитектуре компьютера
или учебникам с целью ликвидировать пробелы в знаниях в этой области.