DOSBox 0.74, Bitweise multiplizieren im IEEE754 Standard



  • Guten Morgen Community,

    ich bin ich 6. Semester meine E-Technik Studiums und meine Profs quälen mich zurzeit mit 4 verschiedenen Programmiersprachen (C++, C, C#, Object Pascal) und ich blicke nicht mehr durch.

    Wir sollen innerhalb der DOSBox 0.74 eine bitweise multiplikation durchführen im IEEE754 Standard. Znächst ist die Zahl 239,125 mit 8 zu multiplizieren.

    Mit der Hilfe eines freundes konnte ich ein Programm erstellen, was aber leider immer nur den Wert 0 ausgibt.

    //Datum: 13.02.2017
    //Aufgabe: Wandle die Zahl 239.125 in eine Bin„rzahl um und fr eine bitweise
    // 	   Multipliaktion durch
    
    //======= HEADER =======
    
    //Bibliotheken
    #include <stdio.h>
    #include <math.h>
    #include <conio.h>
    
    //======== Hauptprogramm =============
    
    int main (void)
    {
    
    //Variablendeklaration:
    
    // - Laufvariable
    	int i;
    
    // - Vorzeichen und Exponenten
    	unsigned char vorzeichen;
    	unsigned char expo;
    	unsigned char test;
    
    // - Union zur Speicherung der umzurechnenden Zahl
    	union
    	{
    	       float f;
    	       unsigned	char i[4];
    	}zahl;
    
    // - Initialisierung der Varibeln
    	zahl.f = 239.125;
    	test = 0x7F;      //127
    
    // Ausgabe der HEX-Zahl in der union
    	for (i=0;i<=3;i++)
    	{
    		printf("%x\n",zahl.i[i]);
    	};
    
    // Vorzeichen extrahieren durch doppelten Bitshift nach links und rechts
    	vorzeichen = (zahl.i[3] >> 7 ) << 7;
    	printf("Vorzeichen: %x\n",vorzeichen);
    
    // Extrahierung des Exponenten
    	expo = (zahl.i[3] << 1) |( zahl.i[2] >> 7 );
    
    // Multiplikation mit 8
    	expo += 3;
    	printf("Exponent: %x \n",expo);
    
    // Wieder zusammenfgen des Exponenten
    	zahl.i[3] =( (expo << 1) | vorzeichen);
    
    // Anpassen des Exponenten
    
           zahl.i[2] = (( zahl.i[2] & test)|( expo <<7));
    //Ausagbe der neuen Zahl
    	printf("Die Zahl lautet:%f \n",zahl.f);
    	for(i=0;i<=3;i++)
    	printf("%x ",zahl.i[i]);
    
    // Warten auf eingabe
         getchar();
    
    //
         clrscr();
    return 0;
    };
    

    Ich schätze, dass es im unteren Bereich liegen muss, da der Expo und das Vorzeichen korrekte ausgegeben werden.

    Danke euch



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum C (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Eigentlich kommt nicht 0 heraus sondern 1.50909e-027.
    Warum das so ist kann ich dir aber auch nicht sagen.

    Der Fehler liegt aber auf jeden Fall in den Zeilen 57 und 61.
    In Zeile 57 wird der Wert auf 7.54545e-028 verändert und in Zeile 61 dann zu dem, was du herausbekommst.



  • Drehe die Bitverschiebung in Zeile 57 um.


Log in to reply