Wie werden Dezimaloperationen berechnet?

326
ColdSolstice

Ich verstehe, dass die reguläre CPU für ganze Zahlentypen (z. B. ganze Zahlen) sowie bitweise Operationen arithmetisch arbeitet. Die FPU führt eine Fließkomma-Arithmetik aus. Ich versuche jedoch zu lernen, wie / wo Arithmetik für Dezimaldatentypen ( Beispiel für c # ) in einem typischen Prozessor vorkommt.

3

2 Antworten auf die Frage

0
Slartibartfast

Dies ist eine Implementierungsfrage ... Sie können die genauen Informationen abrufen, indem Sie den spezifischen Code für die Assembly kompilieren. Informationen hierzu finden Sie in diesem StackExchange-Artikel

Soweit es sich nicht um eine Implementierungsfrage handelt, können Sie hier Anmerkungen zur internen Darstellung sehen, dass das Objekt aus drei Teilen besteht:

  • S = Vorzeichenbit
  • I = 96-Bit-Ganzzahl
  • F = A "Skalierungsfaktor"

Der Wert wird anhand einer Formel wie folgt berechnet:

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

Es gibt Verknüpfungen, die aus diesen Werten genommen werden können, um die Vorteile der CPU zu nutzen. Der Compiler / die Bibliothek implementiert wahrscheinlich diese Verknüpfungen.

0
Mokubai

Die Ganzzahl-Arithmetik wird von einem der grundlegenden Funktionsblöcke der CPU verarbeitet, die als Arithmetic Logic Unit oder ALU bezeichnet wird.

Die ALU kann verschiedene ganzzahlige Additionen, Subtraktionen und Mutiplikationen sowie logische Operationen an Daten durchführen.

Nur weil diese Einheit mit Ganzzahlen arbeitet, bedeutet dies nicht, dass Sie keine Fließkomma-Mathematik durchführen können, sie ist nur langsamer als eine dedizierte FPU. Sehen Sie hier einige Details.