¨ Вычисления над вещественными числами дают почти всегда неверный результат: насколько неверный – зависит от природы вычислений.
¨ Вещественные числа редко бывают точно равны; из-за ограничения разрядов на мантиссу невозможно точное равенство двух величин; почти всегда имеют место погрешности округления; эти особенности необходимо знать и при программировании избегать их.
¨ Из–за фиксированного числа разрядов на мантиссу и порядок происходит ряд неприятностей; усечение – отбрасывание лишних цифр – плохо, округление – лучше; процессор всегда округляет значение.
¨ Ограничение разрядов порядка приводит к переполнению порядка, к отрицательному переполнению порядка или равенству его нулю.
¨ Количество цифр в мантиссе – точность представления; ненадежные цифры могут привести к серьезной потере точности.
¨ При вычитании близких значений происходит потеря точности.
¨ Получение больших чисел может вызвать переполнение порядка, а очень малых – исчезновение числа (превращение в 0).
¨ Если один из операндов вещественный, а другой целый, то перед выполнением операции операнд целого типа приводится к вещественному типу; результат имеет вещественный тип.
¨ Если при выполнении арифметических операций с операндами вещественного типа получается значение, превосходящее максимально допустимое для этого типа, то происходит прерывание программы по переполнению (будет выведено 1.#INF).
¨ Форматированием вывода нужно пользоваться аккуратно, т.к. существует «эффект» форматирования вывода: при выводе вещественного числа происходит «усечение» с округлением дробной части до указанного числа позиций, поэтому можно увидеть «неправильные» результаты: например, значение 1.0000000000Е-10 при выводе в формате: 10:5 дает 0.00000.
-----------------------------------------------------------------------------------------
Арифметические операции
| знак операции | действие (операнды целые и вещественные, результат - в соответствии с типом операндов) |
| - + | изменение/сохранение знака (унарные) |
| + | сложение |
| - | вычитание |
| * | умножение |
| / | деление (если применяется к целочисленным операндам – целочисленное деление с отбрасыванием остатка: 5/2 = 2;) |
| % | деление по модулю (взятие остатка целочисленного деления: 14%3 = 2;) |
| знак операции |
| ||
| унарные + - | высший | ||
| * / % | |||
| + - | низший |
Операция %, вычисляющая остаток от деления первого операнда на второй, имеет и другой, содержательный смысл: второй операнд-константа выступает ограничителем возможных изменений первого операнда и называется модулем. Название такой операции звучит как "... по модулю...":
a = (a + 1) % 16; // a присвоить значение a+1 по модулю 16
Попытка использовать операцию деления по модулю % не для целочисленных операндов приводит к ошибке компиляции!!!
Примерыарифметических операций:
5/4=1; 5/2=2; 2/5=0; 6/3=2; 7/4=1; 7./4.=1.75; 7./4=1.75;
5%4=1; 2%5=2; 5%2=1; 5%0 = ошибка деления
13%4 = 1; (-13)%4 = -1;
13%(-4) = 1; (-13)%(-4)=-1;
При ненулевом делителе всегда выполняется соотношение:
(a / b) * b + a % b == a.
Операция нахождения остатка целочисленного деления:
int main() {
cout << 6 % 8 << endl // 6
<< 7 % 8 << endl // 7
<< 8 % 8 << endl // 0
<< 9 % 8 << endl // 1
<< 10 % 8 << endl; // 2
_getch();
return 0;
}
Такие арифметические процедуры, как сокращение дробей, разложение числа на простые множители, определение наименьшего общего кратного, наибольшего общего делителя, поиск простых чисел, основаны на проверке свойств делимости чисел. Для этой цели используется операция получения остатка от деления «%», определенная для целых чисел.





Для изменения порядка выполнения операций используются ()

