0

Ich muss eine Funktion schreiben, die zwei Zahlen hinzufügen, aber wir haben einen Prozessor, der keine Variable Float-Typ unterstützt !!Hinzufügen von zwei Zahlen ohne float-Variable

Um Brüche darzustellen, wird also eine lange ganze Zahl dargestellt, die tatsächlich mit 4B-32bit dargestellt wird.

Wir definieren die langen Bits wie folgt:

das MSB markierte S signiert.

Die 8 Bits folgen markiert E - Exponential.

Die restlichen 23 Bits markiert M-Mantisse.

Die folgende Formel stellt den Anteil in long:

(E^2) (M) (S^-1).

und ich brauche, um die Funktion zu schreiben:

unsigned long add (unsigned long float1, unsigned long float2)

, die zwei lange Werte erhält (die eigentlich Fraktionen), fügen Sie sie und geben die Antwort in lang.

Ich habe versucht, so etwas zu tun, aber ich bleibe stecken.

unsigned long add (unsigned long float1, unsigned long float2) {

char E1=float1>>23, E2=float2>>23, E3; 

. . . .

Dank :)

+0

Welche Sprache/Umgebung? –

Antwort

0

sui's answer paraphrasieren, hier einige Pseudo-Code.

while exponent(f1) > exponent(f2): 
    increment exponent(f2) 
    shiftleft mantissa(f2) 

while exponent(f2) > exponent(f1): 
    increment exponent(f1) 
    shiftleft mantissa(f1) 

add mantissa(f1) to mantissa(f2) 
adjust exponent 
calculate sign 
Verwandte Themen