Как рассчитываются десятичные операции?

313
ColdSolstice

Я понимаю, что обычный процессор выполняет арифметику для целых чисел (например, целых чисел), а также для побитовых операций; FPU выполняет арифметику с плавающей запятой. Однако я пытаюсь узнать, как / где арифметика для типов данных Decimal ( например, для c # ) происходит внутри типичного процессора?

3

2 ответа на вопрос

0
Slartibartfast

Это вопрос реализации ... Вы можете получить точную информацию, скомпилировав конкретный код для сборки, см. Эту статью StackExchange.

В той степени, в которой это не вопрос реализации, вы можете увидеть здесь замечания о внутреннем представлении, что объект состоит из трех частей:

  • S = знаковый бит
  • Я = 96-битное целое
  • F = «масштабный коэффициент»

Значение рассчитывается по формуле:

value = ( S * I ) / ( 10 ^ F ) 

Из этих значений можно извлечь ярлыки, которые позволяют легко использовать преимущества, которые делает ЦП. Компилятор / библиотека, вероятно, реализуют эти ярлыки.

0
Mokubai

Целочисленная арифметика обрабатывается одним из основных функциональных блоков ЦП, известным как Арифметическая Логическая Единица или АЛУ.

АЛУ может выполнять различные целочисленные сложения, вычитания и искажения, а также логические операции с данными.

Тот факт, что этот модуль работает с использованием целых чисел, не означает, что вы не можете выполнять математику с плавающей запятой, он будет медленнее, чем выделенный FPU. Смотрите здесь для некоторых деталей.

Похожие вопросы