Решение проблемы усечения дробной части...44
Рассмотренные особенности переменных типа int делают невозможным их использование в некоторых приложениях. Но, к счастью, С++ умеет работать и с десятичными числами, которые могут иметь ненулевую дробную часть ( математики называют их действительными числами ). Используя действительные числа, можно избежать большинства перечисленных проблем. Заметьте, что десятичные числа могут иметь ненулевую дробную часть, а могут и не иметь, оставаясь действительными. В С++ число 1.0 такое же действительное число, как и 1.5. Эквивалентным им целым числом является 1. Десятичные числа могут также быть отрицательны, например, -2.3.
В С++ действительные числа определены как числа с плавающей точкой, или просто double ( что означает "двойной" точности; в С++ есть действительные числа и одинарной точности, но это экзотика, о которой мы не будем говорить ). Используя выражение "с плавающей точкой", имеют в виду, что десятичную запятую ( или используемую вместо неё в программах точку ) в десятичных числах можно перемещать вперёд и назад настолько, насколько этого требуют вычисления. Действительные переменные объявляются так же, как и переменные типа int:
double dValue ;
Начиная с этой строки, во всей остальной части программы переменная dValue может принимать значения типа double. Тип уже объявленной переменной изменить нельзя: dValue является действительной переменной и останется ею до конца программы. Рассмотрим, как решается присущая целочисленным переменным проблема отбрасывания дробной части. Для этого в объявлении все переменные определим как действительные ( тип double ):
double dValue ;
dValue = 1.0/3.0 + 2.0/3.0 + 2.0/3.0 ;
Это эквивалентно выражению
dValue = 0.333... + 0.666... + 0.666... ;
которое даёт значение
dValue = 1.666... ;
«Я записал значение 1.666... как число с бесконечным числом шестёрок, однако на самом деле такая запись по сути невозможна в силу того, что имеется предел количества цифр, которое может быть в переменной типа double.»
[Атас!]
«На прилагаемом компакт-диске в папке Cpp_ProgramsChap02 программы IntAverage и FloatAverage демонстрируют разобранные здесь примеры вычисления среднего значения.»
[Диск]
//
/* IntAverage — среднее 3 чисел, используя целочисленную арифметику. */
/* Сперва сумма трёх отношений */
/* ( сумма каждого числа разделённого на 3), */
/* второе разделить сумму трёх чисел на 3. */
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std ;
int main( int nNumberofArgs , char* pszArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать русских текстов */
int nValue1 ;
int nValue2 ;
int nValue3 ;
// введите три числа
cout << "Эта программа вычисляет среднее трёх чисел типа int "
<< "integer ( целочисленной ) арифметики " ;
cout << "Введите три целых числа: " ;
cout << "n1 - " ;
cin >> nValue1 ;
cout << "n2 - " ;
cin >> nValue2 ;
cout << "n3 - " ;
cin >> nValue3 ;
/* Сперва сумма трёх отношений */
cout << "n1/3 + n2/3 + n3/3 = " ;
cout << nValue1/3 + nValue2/3 + nValue3/3 ;
cout << " " ;
/* Сейчас соотношение трёх сумм */
cout << "( n1 + n2 + n3 ) / 3 = " ;
cout << ( nValue1 + nValue2 + nValue3) / 3 ;
cout << " " ;
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ;
return 0 ;
}
/* FloatAverage — среднее 3 чисел, используя арифметику с плавающей точкой.*/
/* В противном случае, так же как IntAverage */
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std ;
int main( int nNumberofArgs , char* pszArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать русских текстов */
float fValue1 ;
float fValue2 ;
float fValue3 ;
// введите три числа
cout << "Эта програма вычисляет среднее трёх чисел типа float "
<< "floating point( с плавающей точкой ) арифметики " ;
cout << "Введите три числа: " ;
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 << " " ;
/* Сейчас соотношение трёх сумм */
cout << "(n1 + n2 + n3)/3 = " ;
cout << (fValue1 + fValue2 + fValue3) / 3 ;
cout << " " ;
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ;
return 0 ;
}
Больше книг — больше знаний!
Заберите 20% скидку на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ