Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Segmenation Fault bei IEEE754 to Dezimal » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 2 Beiträge
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;
}
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!