![]() |
Signifikante Stellen
Hallo,
in der Delphi Hilfe steht unter reellen Typen folgendes: Typ | Bereich | Signifikante Stellen ---------------------------------------------------------- Real48 | 2.9 x 10^39 .. 1.7 x 10^38 | 11-12 usw. Wie kommt man bei den Datentypen auf die Signifikanten Stellen? Habe auch schon im Internet gesucht aber nicht wirklich etwas gefunden. In Wikipedia gibt es auch unter dem Stichwort "Signifikante Stellen" einen Artikel, aber von diesen kann ich nicht auf die "11-12" schließen. Mit freundlichen Grüßen Stefan |
Re: Signifikante Stellen
Na ganz einfach:
Du nimmst dir die Mantisse, rechnest 2^Mantissenbits und siehst nach, wie viele Stellen die Dezimalzahl hat. |
Re: Signifikante Stellen
Bits in Mantisse * Ln(2) / Ln(10) = signifikante Stellen zu Basis 10.
Die Anzahl der Mantissenbits ergibt sich aus -> Bits im Datentyp - 1 Bit Vorzeichen - Bits für Exponent - 1 Bit Vorzeichen Exponent. Gruß Hagen |
Re: Signifikante Stellen
Zitat:
Gruss Reinhard |
Re: Signifikante Stellen
Schon mal danke für die schnellen Antworten.
Aber ich komme mit euerer Formel nicht ganz klar. Zitat:
Bits für Exponent, sind das hier 2 Bits??? (Also von Bereich her 2.9 x 10^39 .. 1.7 x 10^38 sind es ja 2Bits.) 48 Bits - 1 Bit Vorzeichen - 2 Bits für Exponent - 1 Bit Vorzeichen Exponent = 44 Bits Zitat:
Kann mir das bitte einer richtig vorrechnen? |
Re: Signifikante Stellen
Ne, der Exponent 39 bzw. 38 besteht aus 6 Bits. Dazu muss man gucken, aus wie vielen Stellen die Zahl 39 besteht, wenn man sie im Dual-System darstellt.
100111 bzw 100110 Also (48-1-6-1)*ln(2)/ln(10)=12,04 |
Re: Signifikante Stellen
ok, aber in der Hilfe wird ja ein Bereich von 11-12 signifikante Stellen angegeben!?
Was mir gerade so auffällt, in der Delphi 6 Hilfe wurden bei den reellen Typen die minus Zeichen vergessen. So stehts in der Hilfe: Typ Bereich Real48 2.9 x 10^39 .. 1.7 x 10^38 Single 1.5 x 10^45 .. 3.4 x 10^38 Double 5.0 x 10^324 .. 1.7 x 10^308 Extended 3.6 x 10^4951 .. 1.1 x 10^4932 Comp 2^63+1 .. 2^63 1 Currency 922337203685477.5808.. 922337203685477.5807 In einem Buch steht "Genauigkeit" anstatt "signifikante Stellen". Was heißt den jetzt genau "signifikante Stellen/Genauigkeit von 11-12 Stellen"? Rechnet Delphi den ungenau nach den 11-12 Stellen? (Real48 hat ja im negativen Bereich 40 Nachkommastellen, dann müssten ja 28 Stellen ungenau sein?) |
Re: Signifikante Stellen
Bei Fließkommazahlen wird die Zahl unabhängig von der Position des Kommas in der Form 0,... gespeichert. Die Anzahl der signifikaten Stellen gibt an auf weviele Stellen die Zahl genau angegeben werden kann, nicht die Anzahl der möglichen Stellen.
|
Re: Signifikante Stellen
Aber warum können den die signifikanten Stellen nicht gleich den möglichen Stellen sein?
Das ist mir noch nicht klar. |
Re: Signifikante Stellen
Zitat:
Es können also Zahlen gespeichert werde, die mehr Stellen haben, als die Genauigkeit zuläßt. |
Re: Signifikante Stellen
Meine Frage ist noch nicht richtig beantwortet.
Ich habe doch einfach mal einen Test gemacht:
Delphi-Quellcode:
Als ich das Programm ausgeführt hatte, musste ich sehr staunen.
var
a: single; begin a := 1.1111111111111; writeln (a); readln end. Die Ausgabe: 1.11111116409302 Nur 8 Stellen sind also genau. Der Datentyp Single hat einen Bereich von 0.0000000000000000000000000000000000000000000015 bis 340000000000000000000000000000000000000 ( 1.5 x 10^45 .. 3.4 x 10^38 ), signifikante Stellen sind 7-8. Worin liegt jetzt überhaupt der Sinn zu sagen das ich einen riesigen Zahlenbereich habe, obwohl doch nur 7-8 Stellen genau angegeben werden können??? Man bräuchte ja eigentlich überhaupt nicht zu wissen wie der Bereich ist, da der gesamte Bereich sowieso nicht genau dargestellt werden kann. Mal an alle in diesem Forum: Bin ich eigentlich der Einzigste der sich diese Frage(n) stellt oder ist dieses Thema so logisch/einfach das alle Anderen die Antworten auf meine Fragen schon wissen? |
Re: Signifikante Stellen
Das liegt an der internen Darstellung. Da die interne Darstellung im Binärformat allermeistens nicht exakt der Zahl entspricht, die du ihr im Dezimalformat zugewiesen hast, gibt es eine Ungenauigkeit. Je mehr Bits nun für die Darstellung genutzt werden, desto genauer ist die Darstellung, und desto mehr signifikante Stellen hat sie, und desto größer ist der Wertebereich, da mit mehr Bits auch mehr Zahlen dargestellt werden können.
Lesenswert: ![]() |
Re: Signifikante Stellen
Und daraus resultiert dann:
![]() |
Re: Signifikante Stellen
Danke für die Links, jetzt leuchtet es mir ein. :dancer:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz