Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Глава 2. Премудрости объявления переменных 31
Объявление Вы, вероятно, думаете, что переменная в математике — это совершенно аморфное хранилище для любой информации, которая взбредет в голову. Ведь в принципе можно свободно написать следующее: х = 1; х = 2 . 3 х = "Это - предложение." х = Техас Но не настолько гибкий язык. (С другой стороны, C++ очень легко может справиться с совершенно непосильными для нас задачами. Например, ему ничего стоит сложить миллион чисел всего за одну секунду5.) В C++ переменные могут хра_ нить значения только одного типа. Причиной тому является большая разница в раз- мерах памяти, необходимой для хранения значений переменных разных типов. Если некоторые данные программы могут состоять всего из одного числа, то довольно час- то разработчикам приходится манипулировать целыми предложениями. Добавлю, что особенности использования переменных разных типов различны. Пока вы встречались только с переменными типа ir.t: х; х = 1; В C++ тип in t определяет множество целых чисел. Напомню, что целым называ- ется число, не имеющее дробной части. Целые числа используют для самых разных видов вычислений. Детально этому учат в младшей школе, приблизительно до шестого класса, и лишь потом начинается путаница с дробями6. Та же тенденция характерна и для C++, в котором более 90% всех переменных имеют тип int 7 . К сожалению, иногда использование в программах переменных типа ir.t приво- дит к ошибочным результатам. Когда в первой главе вы работали с программой, преобразующей температуру, существовала (пусть неявно) проблема: программа могла работать только с целыми значениями температуры. Отмечу, что в этой кон- кретной программе использование исключительно целых чисел вряд ли приведет к отрицательным последствиям. Но при проведении серьезных метеорологических исследований усечение дробной части температурных значений может поставить под вопрос истинность полученных результатов. Простейшим примером может слу- жить определение значений температуры для книги рекордов Гиннеса. В этом слу- чае требуется высокая точность вычислений, но из-за отбрасывания дробных частей достичь ее невозможно.
Ограничения, налагаемые на целые числа вС++ Целочисленные переменные в C++ представляются типом На перемен- ные этого типа накладываются те же ограничения, что и на их эквиваленты в ма- тематике.
Заметим, что складывает числа не язык, а компьютер — язык только передает ему задание. — Прим. ред. Автор имеет в виду американскую школу; впрочем, современные тенденции в отече- школе примерно те же. — Прим. ред. Эта величина опять-таки существенно зависит от типа разрабатываемой про- граммы. — Прим. ред. 32 Часть I. Первое знакомство с C++ Округление до целых значений Рассмотрим проблему среднего трех чисел. Введем три целочислен- ные — nValue3. Среднее значение вычисляется по формуле (• / 3 Поскольку все три значения являются целыми, их сума тоже будет целым числом. На- пример, сумма чисел I, 2 и 2 равна 5. Но если 5 поделить на 3, получим или 1,666.... В отличие от людей (обладающих разумом), компьютеры (которым он свойственен далеко не всегда) приводят полученный результат к целому значению, просто отбрасывая его дробную часть. При этом 1,666 утратит свой "дьявольский" остаток и превратится в 1. Для многих приложений усечение дробной части числа не представляет большой проблемы. Зачастую оно может быть даже полезным сказанное не каса- ется математических или экономических программ). Однако такое округление целых может весьма пагубно сказаться на работе других программ. Рассмотрим следующую, эквивалентную приведенной выше формулу: nValue2/3 + nValue3/3 Подставляя в нее те же значения 1, 2 и 2, в результате получим 0. Это случилось потому, что каждое слагаемое оказалось числом, меньшим 1. Компьютер округлил их до 0, а сумма трех нудей, как известно, равна 0. Так что такого приведения к численным значениям, говоря, нужно избегать. Ограничения диапазона Второй проблемой переменной типа in t является ограниченный диапазон воз- можных ее значений. Максимальным значением обычной целочисленной переменной является число 2 147 483 647, минимальным — -2 147 483 648, т.е. общий диапазон — около 4 млрд чисел8. Решение проблемы усечения дробной части Рассмотренные особенности переменных типа in t делают невозможным их ис- пользование в некоторых приложениях. Но, к счастью, C++ умеет работать и с деся- тичными числами, которые могут иметь ненулевую дробную часть (математики назы- вают их числами). Используя действительные числа, можно избежать большинства перечисленных проблем. Заметьте, что десятичные числа могут иметь ненулевую дробную часть, а могут и не иметь, оставаясь действительными. В C++ число 1.0 является таким же действительным числом, как и 1.5. Эквивалентным им целым числом является просто 1. В C++ действительные числа определены как числа с плавающей точкой, или про- сто Используя выражение "с плавающей точкой", имеют в что десятич- ную запятую (или используемую вместо нее в программах точку) в десятичных числах можно перемешать вперед и назад настолько, насколько этого требуют вычисления. Действительные переменные объявляются так как и переменные типа int :
Вообще говоря, диапазон представимых типом int определяется множест- вом факторов — в первую очередь компилятором, на выбор типа int которого оказыва- ет огромное влияние тип компьютера, поэтому считать определенным раз и навсегда, что диапазон значений int простирается от до нельзя. — Прим. ред. Глава 2. Премудрости объявления переменных 33 Начиная с этой строки, во всей остальной части программы переменная может принимать значения типа Тип уже объявленной переменной изменить нельзя: fValue является действительной и останется ею до конца про- граммы. Рассмотрим, как решается присущая целочисленным переменным проблема отбрасывания дробной части. Для этого в объявлении все переменные определим как действительные (тип float) : 1/3 + 2/3 + 2/3 Это эквивалентно выражению 0.333.. . + + которое равно
|
Последнее изменение этой страницы: 2019-04-19; Просмотров: 233; Нарушение авторского права страницы