История изменений
Исправление wandrien, (текущая версия) :
А ещё иногда бывает, что последовательное деление и вычисление остатка от деления над одними и теми же операндами компилируются в две инструкции ассемблера, вместо того, чтобы взять уже посчитанный после деления остаток из соответствующего регистра. И это при том, что деление — одна из самых дорогих операций.
Спасибо, что напомнили. Я размышлял об этом, но как-то позабыл.
Однако, не совсем понятно как такие фичи выразить в языке.
Думаю, что встроенной функций, которая компилируется в нативный код машины, если архитектура поддерживает аппаратное деление, и в вызов библиотечной функции, если не поддерживает.
В коде программы использование будет типа такого:
int div, mod;
__divmod(@div, @mod, x, y);
Какой-то более удобный синтаксис не придумывается. Впрочем, операция деления сама по себе достаточно редкая, чтобы заморачиваться отдельным синтаксисом для divmod.
Исходная версия wandrien, :
А ещё иногда бывает, что последовательное деление и вычисление остатка от деления над одними и теми же операндами компилируются в две инструкции ассемблера, вместо того, чтобы взять уже посчитанный после деления остаток из соответствующего регистра. И это при том, что деление — одна из самых дорогих операций.
Спасибо, что напомнили. Я размышлял об этом, но как-то позабыл.
Однако, не совсем понятно как такие фичи выразить в языке.
Думаю, что встроенной функций, которая компилируется в нативный код машины, если архитектура поддерживает аппаратное деление, и в вызов библиотечной функции, если не поддерживает.
В коде программы использование будет типа такого:
int div, mod;
__divmod(div, mod, x, y);
Какой-то более удобный синтаксис не придумывается. Впрочем, операция деления сама по себе достаточно редкая, чтобы заморачиваться отдельным синтаксисом для divmod.