Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Глава 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; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.019 с.)
Главная | Случайная страница | Обратная связь