Дата и время публикации:
Дата и время модификции:
Нотации выражения
1. Что исследуем?
Два арифметических выражения:.
(1) \( 6:2(2 + 1) \) и
(2) \( 6/2(2 + 1) \) .
При этом, для них соблюдаются следующие равенства:
(3) \( 6:2(2 + 1) = 9 \) и
(4) \( 6/2(2 + 1) = 1 \) .
2. Два решения и взгляда
2.1 Взгляд математика
Потому что равенство (3) вытекает из выражения (1), а равенство (4) – из выражения (2). При этом, различие в результатах вычислений находится в разнице записи операции деления.
В первом случае, используется знак двоеточия, что приводит к следующей последовательности вычислений:
(5) \( 6:2(2 + 1) = 6/(2*(2+1)) = 6 / (2*3) = 6 / 6 = 1 \) и
Во втором случае, получаем следующее:
(6) \( (6/2) * (2+1) = 3 * 3 = 9\) .
Как видим, для выражения (1) используется подзабытая запись деления в виде двоеточия (:), когда все остальное выражение берется в скобки слева, что подтверждается его равенством (5).
В тоже время, так как в выражении (2) используется знак (/), оно разбивается на две части: дробь в левой и суммы в правой, что иллюстрирует равенство (6).
2.2 Взгляд программиста
Согласно стандарту программирования все операции должны быть явно указаны, т.о. все сводится к равенству (6), что иллюстрирует листинг 2.1 .
Листинг 2.1.
/*.1.*/ /*.2.*/ int arithmetic_ratio(void) /*.3.*/ { /*.4.*/ int a = 2, /*.5.*/ b = 1, /*.6.*/ c = 6; /*.7.*/ return ((c/a) * (a+b)); /* res=9 */ /*.8.*/ }
При этом, если из первой части выражения, где операция деления, убрать скобки получим код, как показано в листинге 2.2
Листинг 2.2.
/*.1.*/ /*.2.*/ int arithmetic_ratio(void) /*.3.*/ { . . . /*.7.*/ return (c/(a*(a+b))); /* res=1 */ /*.8.*/ }
потому что операция деления будет выполнена ранее чем умножения, так как равнозначные арифметические вычисления, такие как умножение (*) и деление (/), производятся слева направо, а правый операнд берется из левого. Поэтому для получения результата соответствующего равенству (4) необходимо все заключить в скобки ( \( res = 6 / (2*3) = 1 \) ), как было показано в листинге 2.2 .
3. Библиография
3.1 Репетитор по математике. А какому калькулятору поверите Вы?
3.2 math.stackexchange.com: on the priority of arithmetic operations