Может показаться, что условие, используемое в троичной операции , может повлиять на сгенерированный код.
Также может показаться, что троичный вариант может генерировать менее эффективный код, чем простой if / else.
Таким образом, изменяя код цикла во втором фрагменте на:
if (numerator >= 0) check += (int) ((numerator * qdi.Multiplier) >> qdi.Shift);
else check += (int) -((-numerator * qdi.Multiplier) >> qdi.Shift);
или:
if (numerator < 0) check += (int) -((-numerator * qdi.Multiplier) >> qdi.Shift);
else check += (int) ((numerator * qdi.Multiplier) >> qdi.Shift);
или:
check += numerator < 0
? (int) -((-numerator * qdi.Multiplier) >> qdi.Shift)
: (int) ((numerator * qdi.Multiplier) >> qdi.Shift);
приведет к более быстрому выполнению кода.
На самом деле меня немного беспокоит то, что три из четырех комбинаций генерируют быстрый код, но другая может генерировать медленный код ... иногда.