Выражение в скобках 3*X/Z - N, в свою очередь, состоит из двух слагаемых, причём
слагаемое 3*X/Z состоит из трёх множителей, а именно, 3, X и Z.
Для вычисления значения выражения в правой части от знака равенства сначала будет
вычислено значение выражения 3*X/Z. Это выражение содержит две операции
(умножение и деление), имеющих одинаковый приоритет, поэтому вычисление
выражения будет выполняться слева направо. Сначала будет вычислено значение
выражения 3*X, причём тип этого значения будет таким, какой тип имеет переменная X.
Затем будет вычислено значение выражения 3*X/Z, его тип также будет вычислен на
основании правил приведения типов. После этого программа вычислит значение и тип
выражения 3*X/Z - N, потом выражения 2.0*( 3*X/Z - N) и в последнюю очередь -
значение и тип всего выражения 2.0*( 3*X/Z - N) + D.
Легко заметить, что порядок вычисления выражений в программе аналогичен порядку
подобных вычислений в математике, но отличается вычислением типов значений
промежуточных выражений, что существенно влияет на конечный результат вычислений.
В частности (в отличие от правил, принятых в математике), немаловажное значение имеет
порядок операндов в выражении. Чтобы продемонстрировать это, рассмотрим небольшой
пример.
Задача 6. Вычислить значения выражений А/В*С и А*С/В для целых
чисел А, В и С.
Интуитивно ожидается, что результат вычислений в обоих случаях будет одинаковым.
Однако это утверждение справедливо только в отношении действительных чисел. При
вычислении значений выражений, составленных из операндов целого типа, очень важен
промежуточный результат. В таком случае последовательность операндов имеет
принципиальное значение:
int A = 3; // Значение целого типа
int B = 5; // Значение целого типа
int C = 6; // Значение целого типа
int Res_1 = A/B*C; // Результат 0 (ноль)
int Res_2 = A*C/B; // Результат 3 (три)
Проследим процесс вычисления выражения A/B*C:
58