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


Ограничения, налагаемые на числа с плавающей точкой



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


Следующий оператор объявляет переменные lVariabl e типа long и dVariable


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 211; Нарушение авторского права страницы


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