![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Ограничения, налагаемые на числа с плавающей точкой
Хотя числа с плавающей точкой могут решить многие вычислительные проблемы, на их использование тоже существуют ограничения. Проблемы отчасти противопо- ложны тем, которые характерны для целочисленных переменных. Действительные пе- ременные не могут использоваться для перечисления, с ними сложнее работать ком- пьютеру, и они тоже страдают от ошибок округления (хотя намного меньше, чем пе- ременные типа int) . Перечисление Использовать переменные с плавающей точкой для простого перечисления нельзя. C++ не умеет определять, какое целочисленное значение подразумевается под дейст- вительным Например, ясно, что 1.0 есть 1. Но что такое 0.9 или Следует ли их рас- сматривать как 1? Так что C++ избегает многих проблем, требуя использовать при перечислении только целые значения. Скорость вычислений Исторически сложилось так, что процессор компьютера выполняет операции с це- лыми числами гораздо быстрее, чем с действительными. Для сложения 1000 целых чисел процессору может потребоваться столько же времени, сколько для выполнения только 200 вычислений с плавающей точкой. Однако с увеличением производительности микропроцессоров проблема скорости вычислений становится все менее важной. Большинство современных процессоров содержат специальные вычислительные схемы, которые позволяют вычислять выра- жения с плавающей точкой почти так же быстро, как и целочисленные выражения. Потеря точности Действительные переменные не могут решить всех вычислительных проблем. Обычно их точность ограничена приблизительно шестью разрядами, но есть и расши- ренный варианте типа для действительных чисел, который может содержать после де- сятичной точки до 15 значимых разрядов. Чтобы понять эту проблему, представим 1/3 в виде бесконечной последовательно- сти 0.333.... Однако математическое понятие периода в программировании не имеет смысла, так как точность компьютерных вычислений ограничена и где-то наша дробь должна оборваться (что зависит от использованного для хранения числа типа пере- менной). Поэтому, усреднив числа 1, 2, 2, мы получим не точное, а приблизительное значение 666667.
34 Часть I. Первое знакомство с C++ В некоторых случаях ошибки округления может исправлять сам C++ ; например, выводя информацию на экран, вместо числа 0.99999 9 C+ + выдаст пользователю значение 1. Ограниченность диапазона Тип данных также хотя диапазон чисел с плавающей точкой на- много обширнее диапазона целочисленных переменных. Максимальным значением типа in t является число чуть больше 2 млрд. Максимальное значение переменной типа приблизительно равно Ю-18, т.е. 1 с 38 Представляя переменные с плавающей точкой в стандартном виде, C++ учитывает после десятичной точки только первые шесть разрядов. Ос- тальные разряды становятся жертвами ошибочных округлений. Поэтому действительная переменная может хранить значение 123 000 000 без поте- ри точности из-за округления, в то время как значение 123 456 789 дет к ошибке округления.
Вы уже знаете, что все переменные в программе должны быть объявлены и что им должен быть назначен тип. В табл. 2.1 представлен список некоторых стандартных типов переменных языка C++ с указанием их достоинств и недостатков. Таблица Переменные C++ ПЕРЕМЕННАЯ ПРИМЕР ХАРАКТЕРИСТИКА int
float double
char
string long
OF
"this is string" Простые положительные или отрицательные числа, используемые для перечисления Действительные числа Расширенная версия использует больше памяти, допускает работу с большим диапазоном и обеспечивает более высокую точ- ность вычислений Символьный тип; значением переменных может быть символ алфа- вита, цифра, знак препинания или знак арифметической операции. Не годится для арифметических операций Строка символов, составляющая предложение
Потенциально расширенная версия типа int . В GNU C++ и Microsoft Visual C++ разницы между типами lon g и in t нет
|
Последнее изменение этой страницы: 2019-04-19; Просмотров: 238; Нарушение авторского права страницы