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