Forum: Mikrocontroller und Digitale Elektronik Single - Doble


von GerK (Gast)


Lesenswert?

Hallo zusammen,

kann mir schnell jemand die max. Ganzzahl bei Single u. Double sagen.
Bin leider kein Mathe-Genie.

Vielen Dank und schöne Festtage

von Pat W. (frankp)


Lesenswert?


von dunno.. (Gast)


Lesenswert?

(2^maximale Wortbreite deines Datentyps )-1

von GerK (Gast)


Lesenswert?

Danke für die hilfreichen Antworten.

MfG

von GerK (Gast)


Lesenswert?

Sch..., zu schnell abgeschickt.

Es geht mir nur darum, wenn ich eine Single deklariere deren 
Wertebereich
1.5 x 10^–45 to 3.4 x 10^38 ist, wie groß max. die Ganzzahl ist die 
darin enthalten sein kann.

von Udo S. (urschmitt)


Lesenswert?

GerK schrieb:
> to 3.4 x 10^38 ist, wie groß max. die Ganzzahl ist die
> darin enthalten sein kann.

Das wird dir zwar nicht weiterhelfen, weil du nicht sagst was du 
erreichen willst und dich so selbst aufs Glatteis führst aber die größte 
darstellbare Ganzzahl wäre bei deiner Angabe 3.4 x 10^38.

Lese dir mal die Netiquette bzgl Problembeschreibung durch.
So wird das nämlich nix.

von Stefan F. (Gast)


Lesenswert?

> Es geht mir nur darum ... 3.4 x 10^38 ... wie groß max. die Ganzzahl
> ist die darin enthalten sein kann.

In welche Schulklasse gehst du?

10^38 ist eine 1 mit 38 Nullen. Also ist 3.4 x 10^38 eine 34 mit 37 
Nullen dahinter.

von Mathematiker (Gast)


Lesenswert?

GerK schrieb:
> Sch..., zu schnell abgeschickt.
>
> Es geht mir nur darum, wenn ich eine Single deklariere deren
> Wertebereich
> 1.5 x 10^–45 to 3.4 x 10^38 ist, wie groß max. die Ganzzahl ist die
> darin enthalten sein kann.

0.0000000000000000000000000000000000000000000015 - 
340000000000000000000000000000000000000

von GerK (Gast)


Lesenswert?

Stefan Us schrieb:
> In welche Schulklasse gehst du?

ca. 40mal in die letzte!

Es steckt keine konkrete Anwendung dahinter nur persönlicher 
Wissensdurst.

Single ist ja 32Bit breit. DWord ebenfalls. In Dword passen (2^32) - 1
= 4294967295. Wie passt dann in Single eine 34 mit 37Nullen.
Das ist jetzt die ganze Problemstellung.

von Bastler (Gast)


Lesenswert?

Max Integer ergibt sich aus den (expliziten und impliziten) Bite 
Mantisse. IEEE754 vorausgesetzt wären das für single 23+1 Bits also 2^24 
und für double 52+1 Bits also 2^53. BTW die Mantisse hat nach IEEE754 
kein Vorzeichen. Zudem: aus "Ganzzahl" schließe ich, daß diese (sowie 
ihre kleineren Brüder) exakt dargestellt sein soll. D.h. 0,1,2,3,4..2^23 
ohne Lücke.

von npn (Gast)


Lesenswert?

GerK schrieb:
> Stefan Us schrieb:
>> In welche Schulklasse gehst du?
>
> ca. 40mal in die letzte!
>
> Es steckt keine konkrete Anwendung dahinter nur persönlicher
> Wissensdurst.
>
> Single ist ja 32Bit breit. DWord ebenfalls. In Dword passen (2^32) - 1
> = 4294967295. Wie passt dann in Single eine 34 mit 37Nullen.
> Das ist jetzt die ganze Problemstellung.

Weil das zwei verschiedene Zahlenformate sind und demzufolge die 
Darstellung anders ist. DWord ist eine Ganzzahl, die einfach die Bits in 
ihrer Wertigkeit darstellt und Single ist eine Gleitkommazahl, die in 
ihrer Repräsentation in Mantisse und Exponent dargestellt wird.

von Karl H. (kbuchegg)


Lesenswert?

GerK schrieb:

> = 4294967295. Wie passt dann in Single eine 34 mit 37Nullen.
> Das ist jetzt die ganze Problemstellung.

es passen eben nicht alle Stellen der Zahl da rein.

Dein Frage ist im Ansatz schon schief. Denn bei Gleitkommadarstellungen 
ist die Fragestellung anders. Sie lautet: welches ist die kleinste 
Differenz zwischen 2 Zahlen, die gerade noch unterschieden werden 
können.
Bei Integer-Darstellungen ist das einfach. Die Differenz ist immer 1.
Bei Gleitkommadarstellungen ist das aber nicht so einfach. Die Differenz 
hängt von der absoluten Größe der Zahl selbst ab. Der Unterschied 
zwischen 1.2E01 (= 12) und 1.2E02 (=120) besteht nun mal im Exponenten. 
Dementsprechend ist die Differenz zur nächst größeren Zahl 1.3E01 bzw. 
1.3E02 das einemal absolut gesehen 1.0 und das andere mal 10.0

Bei Gleitkommezahlen erkauft man sich einen höheren Wertebereich, indem 
man bei hohen Zahlen auf Auflösung verzichtet. Über den Daumen kann man 
sagen, dass ein Float ca. 5 bis 6 signifikante Stellen aufweist. 
WIchtig: signifikante Stellen! Nicht Nachkommastellen. D.h. für die Zahl 
1234.5678 sind 6 signifikante Stellen bei der 6 in den Nachkommastellen 
aufgebraucht. Alles dahinter ist nur noch gewürfelt. Mit float kann man 
gerade noch einigermassen zuverlässig zwischen 1234.56 und 1234.57 
unterscheiden. Mehr gibt die Auflösung nicht her. Und das ändert sich 
auch nicht, wenn die Zahlen 123456.0 bzw 123457.0 lauten. Oder 1234560.0 
bzw. 1234570.0. Nach 5 bis 6 signifikanten Stellen ist Schluss. 
1234563.0 kannst du nicht mehr von 1234564.0 unterscheiden.

Daher macht deine Fragestellung so keinen wirklichen Sinn. Denn wenn du 
mit Ganzzahlen zuverlässig operieren willst, dann nimm einen 
Ganzzahldatentyp und keinen float oder double.

von GerK (Gast)


Lesenswert?

Karl Heinz schrieb:
> Daher macht deine Fragestellung so keinen wirklichen Sinn.

Das kann durchaus sein. Dafür hab sogar ich Deine Erklärung verstanden.

Das man jeweils den richtigen Datentyp nehmen soll ist mir bewußt und 
handhabe ich auch so.

Ich experementiere gerade in Bascom und da gibt es eine Ungereimtheit.
Da ich nicht wissend bin ob es an mir liegt oder an Bascom hab ich mal
so ungeschickt gefragt.

Dim Zahl As Single
Dim X As Word

Do
  Zahl = 1

  For X = 1 To 65
      Zahl = Zahl * 2
      Print "2^ " ; X ; " = " ; Zahl
  Next X

Loop
End

Bei Single ist bei 2^31 Schluß im Terminal kommt dann nur mehr NAN.
Bei Double läufts bis 65 und weiter.

von Karl H. (kbuchegg)


Lesenswert?

GerK schrieb:

> Bei Single ist bei 2^31 Schluß im Terminal kommt dann nur mehr NAN.
> Bei Double läufts bis 65 und weiter.

Was nichts anderes heisst, als das bei Single auch weniger Bits für den 
Exponenten vorhanden sind als bei Double.

Vergleichbar mit:
Ich erlaube dir 2 Stellen für einen Exponenten im Dezmalsystem. Dann ist 
die größte Zahl, die noch darstellbar ist 1 mal 10 hoch 99 (also eine 1 
mit 99 Nullen drann), während ich dir bei double 3 Stellen im Exponenten 
zugestehe, wodurch du bis 1 mal 10 hoch 999 rauf kommst (also eine 1 mit 
999 Nullen hinten drann)

von GerK (Gast)


Lesenswert?

Danke nochmal für Deine Erläuterung.

Wünsche Dir und allen Beteiligten frohe Festtage.

von Purzel H. (hacky)


Lesenswert?

Zusammenfassend :
siehe auch http://en.wikipedia.org/wiki/IEEE_floating_point

                      mantisse  exponent sign signifikant
single (32bit float) : 24 bit     7 bit   1     7
double (64bit float) : 53 bit    11 bit   1    15
int/dword  32bit     : 31/32 bit   -     0/1    9
int/qword 64bit      : 63/64 bit   -     0/1   18

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.