Я понимаю, что обычный процессор выполняет арифметику для целых чисел (например, целых чисел), а также для побитовых операций; FPU выполняет арифметику с плавающей запятой. Однако я пытаюсь узнать, как / где арифметика для типов данных Decimal (например, для c #) происходит внутри типичного процессора?
2 ответа
Это вопрос реализации ... Вы можете получить точную информацию, скомпилировав конкретный код для сборки, см. Эту статью StackExchange.
В той степени, в которой это не вопрос реализации, вы можете увидеть здесь замечания о внутреннем представлении, что объект состоит из трех частей:
- S = знаковый бит
- Я = 96-битное целое
- F = "масштабный коэффициент"
Значение рассчитывается по формуле:
value = ( S * I ) / ( 10 ^ F )
Из этих значений можно извлечь ярлыки, которые позволяют легко использовать преимущества, которые делает ЦП. Компилятор / библиотека, вероятно, реализуют эти ярлыки.
Целочисленная арифметика обрабатывается одним из основных функциональных блоков ЦП, известным как Арифметическая логическая единица или АЛУ.
АЛУ может выполнять различные целочисленные сложения, вычитания и искажения, а также логические операции с данными.
Тот факт, что этот модуль работает с использованием целых чисел, не означает, что вы не можете выполнять математику с плавающей запятой, он будет медленнее, чем выделенный FPU. Смотрите здесь для некоторых деталей.