Segmenation Fault bei IEEE754 to Dezimal

Neue Frage »

Auf diesen Beitrag antworten »
Max Segmenation Fault bei IEEE754 to Dezimal

Bitte gib hier Deine Frage ein. Welche Lösungsansätze sind Dir selbst dazu eingefallen? Was hast Du schon probiert? Bedenke, dass wir hier Hilfe zur Selbsthilfe leisten und keine Komplettlösungen liefern werden. Viel Erfolg!
 
Auf diesen Beitrag antworten »
Max RE: Segmenation Fault bei IEEE754 to Dezimal

Sorry, das ging schief:

Moin,

ich stehe gerad als C- und Linux und überhaupt Neuling vor einer Suche nach der Nadel im Heuhaufen, wobei leider erschwerend hinzukommt, wie die Nadel aussieht. Sie heißt nämlich Segmentation Fault.

Ziel der Aufgabe war es, ein Programm zu schreiben, dass aus (im Programm) vorgegebenen Arrays für die IEEE754 Fließkommazahl eine Dezimalzahl berechnet, und andersherum eine Dezimalzahl in ieee754 Standard ausgibt. Ich habe als fest die Variable s für mein Vorzeichen und die Arrays exp und mantis für meinen Exponenten und die Mantisse.
So weit, so gut.
Die zweite Aufgabe, also Dezimalzahl in 1 und 0 umwandeln, funktioniert auch super, die ganze Zeigerproblematik etc. bereitet keine Sorge, nur bei der ersten Aufgabe, die ja eigentlich recht einfach klingt, erscheint bei der Ausführung "segmentation fault". Kommentiere ich den ersten Aufgabenteil aus dem Programm aus, liefert das Programm richtige Werte, der Fehler liegt also sicher in diesem teilprogramm.
Ich poste es hier mal mit den Aufrufen in der Hauptfunktion:

float floatToDec(int s, int *exp_array, int *mantis_array);

int main (void) {
/* Variablen für die FloattoDec Funktion */
int exp[8] = {1,0,0,0,0,1,0,0};
int mantis[23] = {1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/* Variablen für die DectoFloat Funktion */
int sign, floatexp[8], floatmantis[23];

/*Aufruf der einzelnen Funktionen*/
float x = floatToDec(1, exp, mantis); <---- klammere ich dies aus, läuft das restliche Programm
printf("Die Dezimalzahl ist:%e\n",x); <----was hier jetzt nicht steht, einwandfrei
decToFloat(-12.25 ,&sign, floatexp, floatmantis);
ausgabe(&sign, floatexp, floatmantis);

return 0;
}

float floatToDec(int s, int *exp_array, int *mantis_array) {

int temp, i, exp;

float x, ftemp;
temp = 128;

/* Berechnung des Exponenten */
for (i = 0; i < 8; i++) {
exp += temp * exp_array[i];
temp /= 2;
}

/* Exponent shiften */
exp -= 127;

temp = 1; /* 2^0 */
x = 0;
/* Der Exponent sagt aus, wie viele Bits der Mantisse wir für die Zahl vor dem Komma benötigen */
/* Wir gehen bis zu der entsprechenden Stelle des Arrays und mulitiplizieren von dort aus rücklaufend mit dem
enstprechenden aufsteigenden 2er Exponent */
for (i = exp-1; i >= 0; i--) {
x += mantis_array[i]*temp;
temp *= 2;
}
/* Zum Schluss addieren wir den Wert, den die implizierte 1 erzeugt */
x += temp;
/* Berechnung der Stellen nach dem Komma, einfache Addition zu x */
ftemp = 0.5;
for (i = exp; i < 23; i++) {
x += ftemp*mantis_array[i];
ftemp /= 2;
}

/* Berechnung des Vorzeichens */

x = (1-(s*2)) * x;
return x;
}
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »