Single - Doble

Gast #3935833
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.
#3935846
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.
Gast #3935856
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.
Gast #3935876
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
Gast #3935887
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.
Gast #3935892
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.
Gast #3935895
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.
#3935914
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.
Gast #3935948
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.
#3936001
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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren