Полезные константы
Полезные константы
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 довольно сильно ограничивает квалификацию программиста, поэтому советую внимательно исследовать вывод, производимый данным фрагментом, и, возможно, обратиться к специальным изданиям по архитектуре компьютера или учебникам с целью ликвидировать пробелы в знаниях в этой области.