AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Genaugkeit von Fließkommazahlen

Ein Thema von sarte · begonnen am 31. Mai 2010 · letzter Beitrag vom 31. Mai 2010
Antwort Antwort
Seite 1 von 2  1 2   
sarte

Registriert seit: 23. Mai 2008
Ort: Australien
66 Beiträge
 
Delphi 7 Enterprise
 
#1

Genaugkeit von Fließkommazahlen

  Alt 31. Mai 2010, 16:17
Hallo,

ich habe eine kurze Frage. Extended (double precision) hat eine Genauigkeit von 19 Stellen und ist doch das genauste was es an Datentypen gibt. Was macht denn dann der Windows-Taschenrechner anders, wenn er bei Fließkommazahlen 33 Ziffern ausgibt?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.709 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Genaugkeit von Fließkommazahlen

  Alt 31. Mai 2010, 16:27
Wie/Was der rechnet weiß ich nicht,
aber die Genauigkeit stimmt schon.

Nach der 20-sten Stelle schleichen sich Fehler ein:
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  e: Extended;
  i: Integer;

begin
  e := 1;
  e := e / 3;
  for i := 0 to 49 do
  begin
    if i mod 10 = 0 then Write(' ');
    Write(Trunc(e) mod 10);
    e := Frac(e) * 10;
  end;
  WriteLn;
  ReadLn;
end.
Wenn du mehr willst, dann wirst du wohl eine MathLib / Mathe-Bibliothek verwenden müssen, welche mit größeren Zahlen arbeiten kann, da sie keinen dieser kleinen Datentypen direkt verwendet.

PS: double precision ist Delphi-Referenz durchsuchenDouble ... Extended ist etwas mehr, aber soweit ich das gehört habe, will man zukünftig Extended für die Programmierer sperren (für diese gibt es dann nur noch Single und Double, wobei Extended nur noch als Systeminternes Rechenformat diehnen soll.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
sarte

Registriert seit: 23. Mai 2008
Ort: Australien
66 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Genaugkeit von Fließkommazahlen

  Alt 31. Mai 2010, 16:43
Hi,

danke für die schnelle Antwort.

Aber wie kommt es zu den falschen Ziffern. Ich hätte erwartet, dass nach der 20. Stelle nur noch 0en kommen. Wenn wir vorne was abschneiden, wie kommt er dann darauf hinten eine 4 anzufügen?
Ab der 73. Stelle folgen dann - warum auch immer - nur noch 0en ...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.709 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Genaugkeit von Fließkommazahlen

  Alt 31. Mai 2010, 16:52
In Extended werden nur die Werte so gespeichert, daß für die höchsten x Stellen eine genaue Darstelltung gewährleistet wird
und dahinter sind keine Inhalte definiert, so daß es sich ab da "quasi" um zufällige Werte handelt, welche z.B. aufgrund von Rundungsfehlern entstehen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Genaugkeit von Fließkommazahlen

  Alt 31. Mai 2010, 16:53
Das versteht man, wenn man den internen Aufbau von diesen Fließkommazahlen kennt.

Die sind nämlich generell so aufgebaut:

+/- m * 10^e

1 <= m < 2 (Je nach größe des Datentyps gibts mehr oder weniger Nachkommastellen)

Durch diese interne Darstellung können Zahlen halt ab einer gewissen Nachkommastelle nicht mehr genau dargestellt werden.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.802 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Genaugkeit von Fließkommazahlen

  Alt 31. Mai 2010, 16:58
In Wirklichkeit sind es 16 ^ e
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.709 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Genaugkeit von Fließkommazahlen

  Alt 31. Mai 2010, 17:03
Und dazu wird intern auch noch alles in 2-er-Potenzen verwaltet.

e als 2-Potenz
und m als 1 + 1 / 2-Potenz

1/3 läßt sich aber in diesem Format garnichtdarstellen, so daß die letzen 1-2 Bits schon einen falschen/gerundeten Wert darstellen.

Beim umwandeln in einen String wurden diese letzen Bits aber mit verrechnet, welches dann eine "nette" Zahlenreihe ergibt.

Wenn du einen Wert hast, welcher genau in dieses interne Format reinpaßt, dann bekommst du deine Unmassen an 0-en natürlich dort raus.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Genaugkeit von Fließkommazahlen

  Alt 31. Mai 2010, 17:10
Die Darstellung ist ein wenig "umständlicher" als hier dargestellt. Ich will aber jetzt nicht darauf eingehen, sondern eher aufs Prinzip.
Egal wie der Exponent aussieht, die Mantisse kann bspw folgendes Format haben:
1,0010110
Wenn man also sagt, die Mantisse hat eine maximale Länge von 8bit (und wir die führende 1 mitrechnen)
Dann errechnet sich obige Zahl zu
1*2^0 + 0*2^-1 + 0*2^-2 + 1*2^-3 + 0*2^-4 + 1*2^-5 + 1*2^-6 + 0*2^-7
=1,17188

Die nachfolgende mögliche Zahl ist
1,0010111
=1*2^0 + 0*2^-1 + 0*2^-2 + 1*2^-3 + 0*2^-4 + 1*2^-5 + 1*2^-6 + 1*2^-7
=1,17969

Wieviele Stellen Genauigkeit würdest du jetzt also im Dezimalen Bereich angeben bei einer Schrittweite von
0,0078125 = 1/128 = 2^-7

--> 2 Stellen Genauigkeit: Aber wie du siehst, ist bei den Zahlen 1,17188 und 1,17969 nicht nach zwei Stellen Schluss.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#9

Re: Genaugkeit von Fließkommazahlen

  Alt 31. Mai 2010, 17:39
Interessant dazu ist auch ein "Experiment" des französischen Mathematikers Fabrice Bellard: Er hat mit einem relativ durchschnittlichen Rechner Pi auf sage und schreibe 2,7 Billionen stellen angegeben.
"Hardware
Technische Daten des für die Berechnung benutzten PCs:
* Core-i7-Prozessor mit 2,93 GHz
* 6 GB* RAM
* 7,5 TB auf fünf Festplatten mit jeweils 1,5 TB (Seagate Barracuda 7200.11)"
Er hat die Zahl mithilfe der Binärdarstellung ermittelt und dann umgewandelt, näheres hier.

Theoretisch müsste das doch auch mit Delphi möglich sein, ich weiß nur nicht, ob das Preis-/Leistungsverhältnis gut ist (wahrscheinlich nicht).
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.709 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Genaugkeit von Fließkommazahlen

  Alt 31. Mai 2010, 17:45
Zitat von Mysterio08:
Theoretisch müsste das doch auch mit Delphi möglich sein, ich weiß nur nicht, ob das Preis-/Leistungsverhältnis gut ist (wahrscheinlich nicht).
Mit'm DEC kann man sich auch massenhaft Stellen von PI berechnen lassen ... die ersten paar Millionen Stellen wurden (soweit ich mich erinnere) innerhalb weniger Millisekunden errechnet, damals auf meinem alten 1,8 GHz-Athlon.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf