# Exponent und Mantisse



## Schepo (29. Okt 2012)

Hallo liebe Java Community,

ich weiß nicht genau ob ich hier richtig bin trotzdem möchte ich eine Frage loswerden.


Kann mir einer erklären was diese Zahlenfolge bedeuet:

01111110100101100111011010011001

Ich weiß nicht genau wie ich den Exponenten und die Mantisse bestimmen kann.

Komme auf 253 müsste also das Komma um 126 Stellen verschieben, aber irgendwie kann das ja nicht funktionieren.

Hatte mir auch schon was gedacht mit einer negativen Zahl.

Weiß einer Rat???

Mit freundlichen Grüßen

Schepo


----------



## Ark (29. Okt 2012)

Schepo hat gesagt.:


> aber irgendwie kann das ja nicht funktionieren.


Warum sollte es nicht?

Ark


----------



## Schepo (30. Okt 2012)

Bin gerade im 1ten Semester und Programmieren ist neu für mich. Kannst du mir die Lösung sagen für die lange 01 Folge 
also welche Dezimalzahl sie darstellen soll? Bin noch unerfahren und weiß noch nicht so recht wie das gehen soll. Die Mantisse ist ja im 32 bit 23 stellen lang wie kann ich das Komma 126 Stellen verschieben? Kann es auch was mit negativen Zahlen zutun haben? Wär dir sehr dankbar.


----------



## FerFemNemBem (30. Okt 2012)

MAhlzeit,



Schepo hat gesagt.:


> Kann mir einer erklären was diese Zahlenfolge bedeuet:
> 
> 01111110100101100111011010011001



Was sollste denn damit machen? Soll das Binaerdarstellung sein und Du sollst das dezimal darstellen?

Gruss, FFNB.


----------



## Schepo (30. Okt 2012)

Ja genau ich muss ja bei der ersten Zahl schauen ob + oder - die nächsten 8 Zahlen sind die Exponenten damit schau ich ja um wieviele Stellen ich die Mantisse verschieben muss.

Danach rechne ich ja aus welche Dezimalzahl dort rauskommt.

Habe es sonst wohl schon gemacht da kam aber beim Exponenten 131 oder so immer raus dann - 127 dem Bias dann hab ich eine Verschiebung um 4 der Mantisse das ist für mich ok.


Nun hab ich aber soviele 1 en im Exponten das ich auf 253 komme das - 127 = 126 das bedeutet für mich 126 Stellen verschieben.


Sowas schwerer hatte ich nach 2 Wochen Programmieren aber noch gar nicht.

Hat es etwas mit dem Minusbereich zu tun?

Ja und genau das ist das Binaersystem muss es ins Dezimalsystem umwandeln.


----------



## FerFemNemBem (30. Okt 2012)

Mahlzeit,

dann gehe einfach von rechts nach links durch:

1x1=1
0x2=0
0x4=0
1x8=8
1x16=16
0x32=0
0x64=0
usw.

Am Ende addierst Du Deine Ergebnisse und hast die Dezimaldarstellung.

Gruss, FFNB.


----------



## TimoH. (30. Okt 2012)

Der Wikipedia-Artikel sollte dir helfen: Gleitkommazahl ? Wikipedia

Ich denke aber , dass dir hier keiner eine Lösung geben wird


----------



## Schepo (30. Okt 2012)

Ja also ok einfach zusammen rechnen alles klar. 

Wenn ich aber das Produktergebnis als Fließkommazahl nach 
IEEE 754 Standart im Binaersystem darstellen soll muss ich dann das 
Verfahren mit dem Exponenten und der Mantisse anwenden?


----------



## FerFemNemBem (30. Okt 2012)

Mahlzeit,

achso IEEE 754. Na dann handelt es sich bei 32 Bit Breite um ein single. Zerlege Deine Binaerfolge in Vorzeichen (1. Bit links), Exponent (2.-9. Bit von links) und Mantisse (der Rest). Dann kannste das doch leicht ausrechnen.

Wo genau hakt es?

Gruss, FFNB.

PS: Falls Du es nicht hinbekommst, kannst Du hier "spicken".


----------



## Schepo (30. Okt 2012)

Ja das Problem liegt nur darin das ich von Zahl 2-9 die Zahl 253 rausbekomme.

Nun muss ich diese Zahl-  127 ja rechen = 126 nun müsste ich die Mantisse ja um 126 Kommastellen
verschieben.

Das versteh ich ja nicht die Mantisse ist ja nur 23 Zeichen lang und hab das auch im Mantissen Converter
eingegeben da kam eine so hohe Zahl raus.

Ich hab auch gelesen das 255 für unendlich glaub stehen kann.

In der Aufgabe steht auch falls das Ergebnis nicht exakt als Fließkommazahl dargestellt werden kann, geben Sie.den Fehler an.


----------



## FerFemNemBem (30. Okt 2012)

Mahlzeit,

der Bereich fuer den Exponenten geht von -126 bis 127. Was waere da Deine 253?

Gruss, FFNB.


----------



## Ark (30. Okt 2012)

@FerFemNemBem: Ich denke, den Exponenten hat der TO schon richtig berechnet. Vorausgesetzt natürlich, der TO weiß, was genau er machen soll:

@TO: Sollst du denn die Ganzzahl 01111110100101100111011010011001 (Basis 2) in das Binärmuster einer IEEE-754-Gleitkommazahl mit einfacher oder doppelter Genauigkeit (quasi 
	
	
	
	





```
float
```
 oder 
	
	
	
	





```
double
```
) umrechnen? Oder sollst du die IEEE-754-Gleitkommazahl (
	
	
	
	





```
float
```
) mit dem Bitmuster 01111110100101100111011010011001 in z.B. eine Dezimalzahl mit entsprechenden Nachkommastellen umrechnen?

Ark


----------



## Schepo (30. Okt 2012)

Ja ich rechne doch wie du es auch gesagt hast mit den Zahlen 2-9

 nun rechne ich doch 1+0+4+8+16+32+64+128= 253-127 dem bias = 126 und nun weiß ich nicht wie ich das auf die Mantisse anwenden muss.


----------



## Schepo (30. Okt 2012)

Ja soll eine Dezimalzahl mit Nachkommastelle darstellen

Wenn ich jetzt z.B. eine leichte Zahl habe 01000001001000000000000000000000 habe ist es für mich einfach.


Habe dann 130 - 127 = 3 1,01000000000000000000000 das Komma um 3 verschieben.

1010,0000000000000 = 8+2= 10 aber verstehe es bei der anderen Zahlenfolge mit sovielen 1en nicht das ich nicht eine Zahl um die 130 raus habe daraus folgt dann 3 sondern 253 daraus folgt 126 dann mit der Kommaverschiebung.

Das ist mein einziges Problem


----------



## Schepo (30. Okt 2012)

Oder geht es auch das ich so eine Zahl in einer anderen Darstellung darstellen kann.

0000 = 0

0001 = 1

0010 = 2 

0011 = 3 etc.

das ich so die Zahl von links nach rechts durchgehe immer im 4er Block und dann die Zahlen zusammen rechne?


----------



## Spacerat (30. Okt 2012)

Die NaN-Definition mal ausser Acht gelassen:

```
int rnd = (int) ((Math.random() * 0xFFFFFFFFL) - 0x80000000L);
boolean negative = (rnd & 0x80000000) != 0;
int exponent = ((rnd >> 23) & 0xFF) - 127;
float mantissa = 1.0f + ((float) (rnd & 0x7FFFFF) / 0x7FFFFF);
float value = (float) (mantissa * Math.pow(2.0, exponent));
if(negative) {
	value = -value;
}
```
126 binäre Nachkommastellen sind keineswegs 126 dezimale Nachkommastellen, evtl. liegt da der Denkfehler.
[EDIT]Klar: das geht mit "Float.intBitsToFloat()" natürlich viel besser, ist aber nicht Sinn der Übung. Aber damit könnte man zumindest noch die Werte vergleichen.[/EDIT]


----------



## Schepo (30. Okt 2012)

Ja danke für den Java code aber sie Aufgabe zu der Binaerzahl ist einfach als Dezimalzahl darstellen wurde schon erklärt danke  und nun muss ich das Produktergebnis als Fließkommazahl nach IEEE 754 Standart im Binaersystem darstellen. Falls es zum Fehler kommt stellen Sie dieses dar. 

Nun weiß ich nicht ob es ein Fehler ist weil ich erst seit 2 wochen Programmieren habe und mir nicht vorstellen kann das.es so schwerund kompliziert sein kann.


----------



## Spacerat (30. Okt 2012)

Um Gleitkommazahlen ins Binärformat zu bringen, würde ich persönlich (wenn's dafür nicht bereits andere Methoden gäbe) Vor- und Nachkommaanteile lt. Rechnung im Wikilink in Strings (bzw. einem Stringbuilder) ablegen und diese aneinander reihen. Die Anzahl der Stellen von der "Verbindungsstelle" zur ersten 1 (Richtung Vorkommabereich +, Richtung Nachkommabereich -) ergeben dann den normalisierten Exponenten (den Exponenten für eine normalisierte Mantisse).
Die einzigen Fehler, die auftauchen könnten, wären wenn der Exponent nach dem Biasing die Werte -128 oder 0 annimmt, dass wären dann Infinität und NaN bzw. je nach Format Definitionssache.


----------

