Читать «С++ для "чайников" .» онлайн - страница 29

Стефан Рэнди Дэвис

         << "floating point( с плавающей точкой ) арифметики\n\n" ;

    cout << "Введите три числа:\n" ;

    cout << "f1 - " ;

    cin  >> fValue1 ;

    cout << "f2 - ";

    cin  >> fValue2 ;

    cout << "f3 - " ;

    cin  >> fValue3 ;

     /* Сперва сумма трёх отношений */

    cout << "n1/3 + n2/3 + n3/3 = " ;

    cout << fValue1/3 + fValue2/3 + fValue3/3 ;

    cout << "\n" ;

     /* Сейчас соотношение трёх сумм */

    cout << "(n1 + n2 + n3)/3   = " ;

    cout << (fValue1 + fValue2 + fValue3) / 3 ;

    cout << "\n" ;

    /* Пауза для того, чтобы посмотреть на результат работы программы */

    system( "PAUSE" ) ;

    return 0 ;

}

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

Хотя применение чисел с плавающей точкой может решить многие вычислительные проблемы, на их использование тоже существуют ограничения. Проблемы отчасти противоположны тем, которые характерны для целочисленных переменных. Действительные переменные не могут использоваться для перечисления, с ними сложнее работать компьютеру, и они тоже страдают от ошибок округления ( хотя намного меньше, чем переменные типа int ).

Перечисление...44

Использовать переменные с плавающей точкой для простого перечисления нельзя. С++ не умеет определять, какое целочисленное значение подразумевается под действительным числом. 

_________________

44 стр. . Первое знакомство с С++

Например, ясно, что 1.0 есть 1. Но что такое 0.9 или 1.1 ? Следует ли их рассматривать как 1 ? Так что С++ избегает многих проблем, требуя использовать при перечислении только целые значения.

Скорость вычислений...45

Исторически сложилось так, что процессор компьютера выполняет операции с целыми числами гораздо быстрее, чем с действительными. Для сложения 1000 целых чисел процессору может потребоваться столько же времени, сколько для выполнения только 200 вычислений с плавающей точкой.

Однако с увеличением производительности микропроцессоров проблема скорости вычислений становится всё менее важной. Большинство современных процессоров содержат специальные вычислительные схемы, которые позволяют вычислять выражения с плавающей точкой почти так же быстро, как и целочисленные выражения.

Потеря точности...45 

Действительные переменные не могут решить всех вычислительных проблем. Обычно их точность ограничена приблизительно шестью разрядами, но есть и расширенный вариант типа для действительных чисел, который может содержать после десятичной точки до 15 значимых разрядов.

Чтобы понять эту проблему, представим 1/3 в виде бесконечной последовательности 0.333.... Однако математическое понятие периода в программировании не имеет смысла, так как точность компьютерных вычислений ограничена и где-то наша дробь должна оборваться ( что зависит от использованного для хранения числа типа переменной ). Поэтому, усреднив числа 1, 2, 2, мы получим не точное, а приблизительное значение 1.666667.

В некоторых случаях ошибки округления может исправлять сам С++; например, выводя информацию на экран, вместо числа 0.999999 С++ выдаст пользователю значение 1.