Forum: PC-Programmierung Größte/Kleinste darstellbare Zahl ?


von Kukuku (Gast)


Lesenswert?

Hallo Leute,

knacke heute erneut an so einer Aufgabe und mir fehlt der Kniff.
Geht ums Gleitkommaformat. Ich soll mit Hilfe einer Gegebenen Basis, 
Mantisse-Stellen, Exponent-Stellen die kleinste und größte darstellbare 
Zahl finden.

z. B.

Basis: 2, Matnisse: 9-Stellen, Exponent 4 Stellen.


Ich weiß das man generell einen Wert so ermitteln kann.

Mantisse * Basis^exponent



Unser Prof. hat mal in der Vorlesung ein Beispiel gegeben dazu.

kleinster Exponent: 1000 = -8     (verstehe ich)
Kleinster Mantissen Wert: 100000000 (klar, bei 9 Stellen).


Und dann hat er einfach gesagt:

Randbedingung:  1/2 <= m < 1
=>  1/2 * 2^-8 * 2^-9  ist demnach die kleinste darstellbare Zahl.


Ok .  Mir ist schon irgendwie klar, dass 1/2 jetzt die Matnisse ist, 
dann wird einfach mit negativen Exponenten und der negativen Stellenzahl 
der Mantisse mulitpliziert. Aber ist das auch so ?

Was ist denn die größte darstellbare Zahl? Eigentlich kenne ich nur die 
Randbedingung:  1 <= m < 2 ! Dann müsste ich ja einen Wert nehmen, der 
so nah wie möglich an der 2 ist, aber kleiner bleibt... Aber das scheint 
mir irgendwie ... schwer.

Oder wäre die größte positive darstellbare Zahl in dem Fall einfach 1 * 
2^7 * 2^9  (9 Stellen, 7 als Exponent weil 0111) ?


Ich bedanke mich vielmals :) !

von (prx) A. K. (prx)


Lesenswert?

Kukuku schrieb:
> Kleinster Mantissen Wert: 100000000 (klar, bei 9 Stellen).

Wenn denormalisierte Mantissen zulässig sind, dann 000000001.

> Dann müsste ich ja einen Wert nehmen, der
> so nah wie möglich an der 2 ist

111111111 ist so dicht dran an 2, wie die Mantisse zulässt.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Ausserdem solltest du dich mit dir einig werden, ob deine Mantisse nun 
[0.5,1) umfasst, oder [1,2). Geht beides, aber entweder oder.

von Kukuku (Gast)


Lesenswert?

Hallo,

erstmal Danke für deine Antworten. Ganz ehrlich, ich weiß es auch nicht.

In diesem Aufgabentypus steht z. B. einfach:

In dieser Aufgabe geht es um die binäre Gleitkommadarstellung mit 
9-stelliger Mantnisse und 4 stelligen Exponent.

1) Was ist die kleinste positive darstellbare Zahl?
2) Was ist die größe positive darstellbare Zahl?


für 1) hat in der Vorlesung einfach oben genannte Rechnung angegeben und 
gemeint, für Fall 2) müsste man die mantnisse und den Exponenten nur 
möglichst groß wählen.

Daher hätte ich jetzt geschlossen statt 1/2 * 2^-8 * 2^-9 für die 
kleinste positive darstellbare Zahl dann einfach 1/2* 2^7 * 2^9

?

Das Problem, ist dass wir diese Rechnungen auch noch in Technische 
Grundlagen haben und in einem anderen Fach, und jeder Prof. macht das 
irgendwie ein bisschen anders, so dass ich das Große Ganze nicht auf die 
Kette kriege.

von Kukuku (Gast)


Lesenswert?

Ok. Also Randbedingung ist in jedem Fall 1/2 <= m < 1

von (prx) A. K. (prx)


Lesenswert?

Kukuku schrieb:
> kleinste positive darstellbare Zahl dann einfach 1/2* 2^7 * 2^9

Was immer das auch ist, es ist weder die kleinste positive darstellbare 
Zahl noch die grösste.

Raten ist zwar auch ein Ansatz, aber ob das zum Erfolg führt? 
Insbesondere wenn dann jemand die peinliche Frage stellt, wie du dazu 
kommst.

Kannst es ja mal im ersten Denkansatz dezimal probieren. Also was 
rauskommt, wenn ein Zahlenformat
  #,######## * 10^+/-####
zur Verfügung steht.

> Das Problem, ist dass wir diese Rechnungen auch noch in Technische
> Grundlagen haben und in einem anderen Fach, und jeder Prof. macht das
> irgendwie ein bisschen anders, so dass ich das Große Ganze nicht auf die
> Kette kriege.

Pfiffig die Leutchens. Das bedeutet nämlich, dass man es verstehen muss. 
Nicht bloss nachplappern oder Werte in Formeln einsetzen. ;-)

Nur so nebenbei: Haben deine Zahlen auch ein Vorzeichen?

: Bearbeitet durch User
von Kukuku (Gast)


Lesenswert?

A. K. schrieb:
> Pfiffig die Leutchens. Das bedeutet nämlich, dass man es verstehen muss.
> Nicht bloss nachplappern oder Werte in Formeln einsetzen. ;-)


Ja, nur hilft mir das nichts wenn das nur anskizziert ist im Script und 
ich die Aufgaben nicht rechnen kann, weil ich auch keinen Vergleich 
habe, was richtig ist.

So hilft mir das natürlich nichts. Naja, lern ich halt auf Lücke - auch 
egal. Hab mich da heute schon den ganzen Tag mit beschäftigt,macht 
keinen Sinn.

von (prx) A. K. (prx)


Lesenswert?

Was suchst du? Die fertige Lösung? Was bringt dir das? Einen Ansatz, 
sich dem zu nähern, habe ich aufgezeigt. Es ist deine Sache, was du 
draus machst.

von (prx) A. K. (prx)


Lesenswert?

Kukuku schrieb:
> Ja, nur hilft mir das nichts wenn das nur anskizziert ist im Script und
> ich die Aufgaben nicht rechnen kann, weil ich auch keinen Vergleich
> habe, was richtig ist.

Mit der Frage, ob deine Gedanken richtig sind, kommst du hier vielleicht 
schon weiter. Aber zumindest bei mir nicht mit der Frage nach dem 
fertigen Lösungsweg. Das ist kein Sadismus, sondern liegt daran, dass 
ich persönlich weit bessere Erfahrungen damit gemacht habe, Sachverhalte 
zu verstehen, als irgendwas auswendig zu lernen.

Ich hatte übrigens oben mal auf Denormals hingewiesen. Ist dir klar was 
das ist? Ist in diesem Zusammenhang nicht ganz unwichtig. Wenn du auf 
Tipps absolut nicht eingehst - was erwartest du dann?

: Bearbeitet durch User
von Kukuku (Gast)


Lesenswert?

Das Problem ist, ich würde es ja gerne verstehen. Und es wäre auch toll, 
wenn ich dazu im Skript auch mal eine richtige Erklärung finden würde. 
Aber ich finde immer nur diese angeschnittenen Beispielaufgaben, das 
macht mich irre.


Also ok. Ich versuche es nochmal mit strenger Logik^^

Exponent 4 Stellen
Mantnisse 9 Stellen
Basis: 2

Ich suche die kleinste positive darstellbare Zahl.
Also muss ich den Exponent und die Mantisse möglichst klein wählen.

Kleinster Exponent = 1000 = -8  Aufgrund der 
Zweierkomplementdarstellung.

Kleinste Mantisse   000000001 = 1

Da ich ja aber eine Kommezahl brauche hat meine Mantnisse den Wert
1 / 512  = 1 / 2^9

jetzt habe ich

m = 1/2^9
exponent -8
basis 2


Nach der allgemeinen Formel basiert ja die Darstellung ja auf folgendem.

z = m * b^e


Das wäre dann in meinem Fall

z = 1/2^9 * 2^-8  <=>    1 * 2^-9 * 2^-8   =  1 * 2^-17



Aber eigentlich ist ja meine Randbedingung 1/b <= m < 1
Also 1/2 <= m < 1 und demnach wäre meine Rechnung eigentlich

1/2 * 2^-17  - also 1/2 statt 1. Weil 1/2 eben der kleinste Wert wäre.

Aber das ist der Punkt, der mich verwirrt. Ich habe zwar 1/2 als 
Randbedingung, aber 1/2 lässt sich Binär doch gar nicht darstellen ! 
Warum ist das dann so?

War mein Ansatz und meine Überlegung richtig?

von Kukuku (Gast)


Lesenswert?

Und danke übrigens für deine Geduld mit mir :-) !

von Kukuku (Gast)


Lesenswert?

Und ja ich weiß das du auf Denormals hingewiesen hast. Entschuldige ! 
Wir müssen hier in Programmierung das nicht "normalisieren", wie wir das 
in Technische Grundlagen  machen  müssen.

von (prx) A. K. (prx)


Lesenswert?

Kukuku schrieb:
> Kleinster Exponent = 1000 = -8  Aufgrund der
> Zweierkomplementdarstellung.

Passt.

> Kleinste Mantisse   000000001 = 1
> Da ich ja aber eine Kommezahl brauche hat meine Mantnisse den Wert
> 1 / 512  = 1 / 2^9

Passt auch, aber (A), siehe unten.

> z = 1/2^9 * 2^-8  <=>    1 * 2^-9 * 2^-8   =  1 * 2^-17

Na also, geht doch.

> Aber eigentlich ist ja meine Randbedingung 1/b <= m < 1
> Also 1/2 <= m < 1 und demnach wäre meine Rechnung eigentlich
>
> 1/2 * 2^-17  - also 1/2 statt 1. Weil 1/2 eben der kleinste Wert wäre.

Und damit sind wir bei den Denormals. Wenn die Mantisse zwingend 
entweder 0 (gibts auch ;-), oder >= 0,5 ist, dann sind denormalisierte 
Mantissen nicht zulässig, aber (A) ist genau das.

> Aber das ist der Punkt, der mich verwirrt. Ich habe zwar 1/2 als
> Randbedingung, aber 1/2 lässt sich Binär doch gar nicht darstellen !

Aber klar doch. Bei einer Mantisse, die zwischen 0,5 (inkl) und 1 (ixkl) 
liegt, ist 100000000 (binär) exakt 0,5 (dezimal). Weil der Punkt links 
davon liegt, es also 0,100000000 ist.

von (prx) A. K. (prx)


Lesenswert?

Kukuku schrieb:
> Und ja ich weiß das du auf Denormals hingewiesen hast. Entschuldige !
> Wir müssen hier in Programmierung das nicht "normalisieren", wie wir das
> in Technische Grundlagen  machen  müssen.

Keine Ahnung was du damit sagen willst. Der Witz ist nur, dass eine der 
Aussagen oben, die du deinem Prof zuschreibst, nur korrekt ist, wenn 
denormalisierte Mantissen zulässig sind (also 0,000000001). Und 
andererseits bei denormalisierten Mantissen die Forderung m >= 0,5 
verletzt ist. Um diesem Dilemma zu entfliehen muss man wohl Letzteres 
eher als Hinweis denn als zwingende Forderung verstehen, also m < 0,5 
zulassen. Oder zu einem anderen Ergebnis kommen als der Prof. Du hast 
die Wahl. ;-)

Wenn die Mantisse entweder 0,000000000 oder 0,1xxxxxxxx sein darf, nie 
aber 0,0xxxxxxxx mit mindestens einem x != 0 (d.h. nur normalisierte 
Mantissen), dann kommt für die kleinste darstellbare Zahl != 0 ein 
anderes Ergebnis heraus, als wenn jede Mantisse zulässig ist.

Daher also die beiden Möglichkeiten für die kleinste Zahl != 0:
(a) denormalisiert: m=0,000000001 e=1000
(b) normalisiert:   m=0,100000000 e=1000
Wirst dich für eine davon entscheiden müssen.

Am anderen Ende, also der grössten Zahl ist es einfacher. Da gibts keine 
Denormals.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

NB: Was ist das eigentlich für ein Studium?

von (prx) A. K. (prx)


Lesenswert?

Kukuku schrieb:
> Aber das ist der Punkt, der mich verwirrt. Ich habe zwar 1/2 als
> Randbedingung, aber 1/2 lässt sich Binär doch gar nicht darstellen !

Um das mal anders zu formulieren: Deine Mantisse ist eine Festkommazahl. 
0 Vorkommastellen und 9 Nachkommastellen. Und grad so, wie 0,1 dezimal 
1/10 ist, ist 0,1 binär 1/2.

Was du wirklich nicht endlich binär darstellen kannst ist 1/10 
(dezimal).

: Bearbeitet durch User
von Kukuku (Gast)


Lesenswert?

Danke für die ausführlichen Antworten ! Das ist aber tatsächlich ein 
Dilemma. Wahrscheinlich hast du recht, und es ist nur so eine pi-mal 
Daumen Anweisung, die man dann wohl in seinem Fach so hinnehmen soll. 
Ich nehme es jetzt einfach mal hin, dass die Randbedingung 1/2 ist und 
ich beim kleinsten Wert dann auch von diesem ausgehe. Hoffe ich. Es 
steht ja leider nichts im Skript darüber. Das ist ja das Haare raufende.

Danke übrigens.

Ich versuche es jetzt mal mit dem größten Wert

Exponent: 0111  = 7

Mantisse 011111111 = 255

, ich möchte das komma ja wieder verschieben. Da das auch immer so 
macht, wirds dann halt schon passen.

Meine Mantisse wäre also 255/2^9

Nach der Formel z = m * b^e

wäre es dann 255/2^9 * 2^7  =  255/2^2 = 255/4 = 63.75


63.75 wäre die größte positive Darstellbare Zahl. Ist das so? Das kommt 
mir irgendwie so... wenig vor ? Oder hab ich jetzt wieder einen Bock 
geschossen ?

von Kukuku (Gast)


Lesenswert?

A. K. schrieb:
> NB: Was ist das eigentlich für ein Studium?

Informatik mit schwerpunkt Technische Informatik 
(Automatisierungstechnik/ Softwareentwicklung). Bin aber auch erst im 1. 
Semester, vielleicht stell ich mich auch noch zu doof an x)

von (prx) A. K. (prx)


Lesenswert?

Kukuku schrieb:
> Exponent: 0111  = 7

Korrekt.

> Mantisse 011111111 = 255

Hossa... Jetzt wirds spannend und die Verwirrung offenkundig.

Mantissen in Zweierkomplementdarstellung bin ich noch nie begegnet. Die 
werden eigentlich immer als sign/magnitude dargestellt - daher übrigens 
meine Frage nach dem Vorzeichen. Will hoffen, dass das hier auch so 
gemeint ist, sonst lösch (fast) alles was ich bisher geschrieben habe.

Jedenfalls ist im üblichen Fall, also mit separatem Vorzeichen und 
vorzeichenloser Mantisse, die grösste Mantisse 111111111, also 
0,111111111, also fast 1.

: Bearbeitet durch User
von k.A. (Gast)


Lesenswert?

A. K. schrieb:
> und grad so, wie 0,1 dezimal 1/10 ist, ist 0,1 binär 1/2.
Und warum kann der blöde Windows-Taschenrechner mit Zahlen wie 0,1 binär 
nicht umgehen, aber mit 0,1 dezimal, obwohl er sich zwischen Binär- und 
Dezimaldarstellung umschalten läßt.

von Kukuku (Gast)


Lesenswert?

Klar..sorry, die ist ja gar nicht im Zweierkomplement. Blödsinn von mir.

also

511/2^9 * 2^7  dann = 511 * 2^-9 * 2^7 = 511 * 2^2 = 2044.

Kommt mir immer noch klein vor ^^ aber sollte dann ja stimmen?

von (prx) A. K. (prx)


Lesenswert?

k.A. schrieb:
> Und warum kann der blöde Windows-Taschenrechner mit Zahlen wie 0,1 binär
> nicht umgehen, aber mit 0,1 dezimal, obwohl er sich zwischen Binär- und
> Dezimaldarstellung umschalten läßt.

Weil dein Taschenrechner binär offenbar nur ganzzahlig rechnet. Nur 
wirst du kaum das Unvermögen deines Taschenrechners als Beweis für eine 
postulierte Nichtexistenz binärer Kommazahlen heranziehen können. :-)

von Kukuku (Gast)


Lesenswert?

Wieder so ein bock. 511 * 2^-2  = 127.75.  Jetzt aber - oder XD ?

von (prx) A. K. (prx)


Lesenswert?

Kukuku schrieb:
> Kommt mir immer noch klein vor ^^ aber sollte dann ja stimmen?

Passt schon. Bist du bei der kleinsten Zahl weiter gekommen? Bzw. den 
beiden Möglichkeiten.

Dass dieser Bereich klein ist, liegt an dem kleinen Exponenten mit 
seinen 4 Bits. Im beliebte IEEE Format sinds ein paar Bits mehr.

von (prx) A. K. (prx)


Lesenswert?

Kukuku schrieb:
> Wieder so ein bock. 511 * 2^-2  = 127.75.  Jetzt aber - oder XD ?

Vorher wars richtig. Du solltest wirklich dazu übergehen, die Mantisse 
als Kommazahl zu schreiben, statt als Ganzzahl. Sonst stolperst du 
permanent über die eigenen Füsse.

Die Mantisse "111111111" ist tatsächlich die Kommazahl 0,111111111 
(binär), was du oben korrekt als 511/2^9 beschrieben hast. Und 
entspricht damit der Forderung m < 1.

: Bearbeitet durch User
von Kukuku (Gast)


Lesenswert?

A. K. schrieb:
> Kukuku schrieb:
>> Wieder so ein bock. 511 * 2^-2  = 127.75.  Jetzt aber - oder XD ?
>
> Vorher wars richtig. Du solltest wirklich dazu übergehen, die Mantisse
> als Kommazahl zu schreiben, statt als Ganzzahl. Sonst stolperst du
> permanent über die eigenen Füsse.
>
> Die Mantisse "111111111" ist tatsächlich die Kommazahl 0,111111111
> (binär), was du oben korrekt als 511/2^9 beschrieben hast. Und
> entspricht damit der Forderung m < 1.



Ok, klar das entspricht der Forderrung. Nur die Aufgabe sagt, ich solle 
die größte Zahl finden. Aber du hast recht, das verwirrt nur das 
auszuschreiben. Ich werde einfach dann schreiben 511/2^9 * 2^7

Mehr will er ja auch gar nicht sehen.

Ich danke dir vielmals das du mir soviel geholfen hast !

von Kukuku (Gast)


Lesenswert?

Ne ok doch nicht klar.   511/2^9 * 2^7  ist doch jetzt richtig oder? 
Weil du sagtest das vorher, aber das stimmt ja net.

von (prx) A. K. (prx)


Lesenswert?

Kukuku schrieb:
> Ne ok doch nicht klar.   511/2^9 * 2^7  ist doch jetzt richtig oder?
> Weil du sagtest das vorher, aber das stimmt ja net.

Doch, das passt schon. Dein 511 * 2^-2  = 127.75 passte nicht.

von Kukuku (Gast)


Lesenswert?

A. K. schrieb:
> Kukuku schrieb:
>> Ne ok doch nicht klar.   511/2^9 * 2^7  ist doch jetzt richtig oder?
>> Weil du sagtest das vorher, aber das stimmt ja net.
>
> Doch, das passt schon. Dein 511 * 2^-2  = 127.75 passte nicht.

Irgendwie bin ich gerade verwirrt. Warum soll das denn nicht passen?

Die Formel sagt doch m * b^e  , das 511/2^9 * 2^7 ist.

<=> 511 * 2^-7 * 2^9  = 511 * 2^-2

511/2^9 * 2^7 ist doch 127.75 Also ist das doch äquivalent. So habe ich 
doch ein bei der kleinsten positiven darstellbaren Zahl gerechnet.


Das was ich vorher geschrieben hatte ( 511/2^9 * 2^7  dann = 511 * 2^-9 
* 2^7 = 511 * 2^2 = 2044). Kann doch nicht stimmen, weil ich die 
Potenzgesetze falsch angewendet habe. Das ist doch 511 * 2^(-9+7)

von (prx) A. K. (prx)


Lesenswert?

Kukuku schrieb:
> Irgendwie bin ich gerade verwirrt. Warum soll das denn nicht passen?

Tu es, sorry. Ich hatte gedacht, du beziehst dich bei der Korrektur auf 
die Mantissenrechnung, nicht das Gesamtergebnis. Und hatte deine 
Rechenkünste nicht komplett nachvollzogen.

: Bearbeitet durch User
von Kukuku (Gast)


Lesenswert?

Alles klar !

Dann nochmal wirklich vielen Dank an dieser Stelle.

Liebe Grüße und noch einen schönen restlichen Nikolaus-Tag :) Und 
natürlich Wochenende.

von (prx) A. K. (prx)


Lesenswert?

Eigentlich erwartete ich noch deine Erkenntnisse zum unteren Ende. :)

von k.A. (Gast)


Lesenswert?

A. K. schrieb:
> Nur wirst du kaum das Unvermögen deines Taschenrechners
Das ist nicht "mein" Taschenrechner, sondern der, der mit einem der am 
weitesten verbreiteten PC-Betriebssysteme mit über 20 Jahren 
Entwicklungsgeschichte von einem Softwarekonzern mit Firmensitz in 
Redmond/USA ausgeliefert wird :-(

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.