По следам наших выступлений
Много лет назад я задавался вопросом (или тут), бывает ли такое в жизни, чтобы целочисленное деление отрицательного числа на отрицательное давало положительный остаток.
Оказывается, случаи разные бывают, и небезызвестный компилятор с Паскаля по ошибке вычисляет остаток именно так при оптимизации константных выражений:
Извините, если кого обидел.
Я тут поразмыслил с анализом размерностей и решил, что ситуация, когда знак остатка совпадает со знаком частного, физического смысла не имеет. Смотрите:
Если тебе надо пройти 5 метров на юг трехметровыми шагами, а ты стоишь лицом к северу, то логично будет, если остаток пути надо делать
- или всегда в ту же сторону света, в какую делал шаги; неважно лицом вперед или пятился (сделал один шаг на юг, и еще надо 2 метра на юг, знак остатка равен знаку делимого),
- или всегда вперед (сделал два шага пятясь, и еще метр вперед, знак остатка равен знаку делителя),
- или, так уж и быть, всегда на север (остаток всегда неотрицательный).
А вот логика, что если ты ходил вперед, то остаток должен быть к северу, а если пятился, то к югу (знак остатка равен знаку частного), мне была бы непонятна.
This entry was originally posted at http://spamsink.dreamwidth.org/1053489.html. Please comment there using OpenID.
Оказывается, случаи разные бывают, и небезызвестный компилятор с Паскаля по ошибке вычисляет остаток именно так при оптимизации константных выражений:
PASCAL COMPILER 15.0 (15.02.82)
00001 1 0 PROGRAM MAIN(OUTPUT);
00001 2 1 VAR P5, M5, P3, M3: INTEGER;
00007 3 2 BEGIN
00010 4 2 P5:=5; P3:=3; M5:=-5; M3:=-3;
00014 5 2 WRITELN(’ 5 MOD 3 |-5 MOD 3 | 5 MOD -3 |-5 MOD -3’);
00017 6 2 WRITELN(’ CONST’, 5 MOD 3, -5 MOD 3, 5 MOD (-3), -5 MOD (-3));
00032 7 2 WRITELN(’ VAR ’, P5 MOD P3, M5 MOD P3, P5 MOD M3, M5 MOD M3);
00063 8 0 END.
*EXECUTE
5 MOD 3 |-5 MOD 3 | 5 MOD -3 |-5 MOD -3
CONST 2 -2 -1 1
VAR 2 1 -1 -2
Извините, если кого обидел.
Я тут поразмыслил с анализом размерностей и решил, что ситуация, когда знак остатка совпадает со знаком частного, физического смысла не имеет. Смотрите:
Если тебе надо пройти 5 метров на юг трехметровыми шагами, а ты стоишь лицом к северу, то логично будет, если остаток пути надо делать
- или всегда в ту же сторону света, в какую делал шаги; неважно лицом вперед или пятился (сделал один шаг на юг, и еще надо 2 метра на юг, знак остатка равен знаку делимого),
- или всегда вперед (сделал два шага пятясь, и еще метр вперед, знак остатка равен знаку делителя),
- или, так уж и быть, всегда на север (остаток всегда неотрицательный).
А вот логика, что если ты ходил вперед, то остаток должен быть к северу, а если пятился, то к югу (знак остатка равен знаку частного), мне была бы непонятна.
This entry was originally posted at http://spamsink.dreamwidth.org/1053489.html. Please comment there using OpenID.