AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

100 milliarden Werte speichern!

Offene Frage von "LePtitmort"
Ein Thema von LePtitmort · begonnen am 26. Jun 2006 · letzter Beitrag vom 6. Jul 2006
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#21

Re: 100 milliarden Werte speichern!

  Alt 1. Jul 2006, 10:38
Zitat von LePtitmort:
Mein Array ist momentan 10 x 10 x 999 999 gross (vom typ "extended") und wenn ich jetzt mein Array löschen will
(bzw. genauer gesagt leeren oder überll ne 0 reinschreiben) dauert das ewig, gibts da nen Trick wie man das beschleunigen kann? irgendein schneller Befehl? weil mit ner for-Schleife einfach durchlaufen lassen dauerts eindeutig zulange.
Das sollte so gehen:
Delphi-Quellcode:
type
  TArr = array[1..10,1..10,1..1000] of extended ;
var
  Arr : TArr ;

procedure LoescheArr (Arr : TArr) ;
begin
     FillChar (Arr,sizeof(Arr),0) ;
end;
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#22

Re: 100 milliarden Werte speichern!

  Alt 1. Jul 2006, 10:41
Gib bei diesem Programm mal bitte sinvollere Startparameter an, da ich nicht weiß wo ich Nullen lassen kann und wo nicht, bei mir kommt pro Sekunde 4 mal (oder auch öfter) ne DivByZero Meldung


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#23

Re: 100 milliarden Werte speichern!

  Alt 1. Jul 2006, 10:51
Zitat von Flare:
Gib bei diesem Programm mal bitte sinvollere Startparameter an, da ich nicht weiß wo ich Nullen lassen kann und wo nicht, bei mir kommt pro Sekunde 4 mal (oder auch öfter) ne DivByZero Meldung
Auf welchen Beitrag ist das bezogen
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#24

Re: 100 milliarden Werte speichern!

  Alt 1. Jul 2006, 10:54
Das ist auf LePtitmort bezogen...


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
LePtitmort

Registriert seit: 25. Jun 2006
20 Beiträge
 
#25

Re: 100 milliarden Werte speichern!

  Alt 1. Jul 2006, 10:57
einfach auf günstige werte klicken!
-ich steck schon immer in der Scheisse nur die Tiefe wechselt-
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#26

Re: 100 milliarden Werte speichern!

  Alt 1. Jul 2006, 11:04
Geht klar Nur wenn ich dann nochmal auf "Berechnen und zeichnen" klicke, macht er kompletten Blödsinn ^^
Normalerweise müsste er ja das selbe Bild nochmal zeichnen, das ist aber nicht annähernd so!
Und diese DivByZero-Meldungen kamen bei mir nach dem 3. oder 4. mal "Berechnen ..." klicken wieder.


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#27

Re: 100 milliarden Werte speichern!

  Alt 1. Jul 2006, 11:22
Zitat von LePtitmort:
So jemand sagte das ich die Werte (bzw. jeden 10 000sten) in einer list speichern, wie ich schon sagte ich bin noch nicht ganz so Delhpi-fit. Was hat das für Vorteile?
In deinem Fall gar keine. Eine Liste ist einfach nur eine dynamische Datenstruktur, die Länge ist zu keinem Zeitpunkt festgelegt. Du kannst dir anschauen wie viele Elemente sich gerade in dieser Liste befinden, aber auch noch beliebig viele (soweit Speicher vorhanden) hinzufügen und wieder entfernen.

Zitat von LePtitmort:
ich brauch die alt berechneten Werte eigentlich nicht mehr, zumindest nicht regelmässig, ich brauch den letzetn Wert der Berechnung und des wars. Gibts noch andere bessere Metheoden?
Aber ja, denke ein paar wurden hier schon angesprochen. Wichtig ist es, das du nicht alles im Speicher hälst was du nicht brauchst. Dazu gleich mehr.

Zitat von LePtitmort:
Und mein Arbeitsspeicher kommt auch langsam an seine Grenzen... bleiben die Arrays im Arbeitsspeicher gespeichert?
Jede deiner Variablen landet im Arbeitsspeicher. Ein Array versucht sogar seinen kompletten Platz in einem Stück im Arbeitsspeicher zu finden. Ist dein Array nur groß genug, ist der Arbeitsspeicher sofort überfüllt (und es geht mit virtuellem Speicher weiter). Listen ändern daran auch wenig (aber hier nicht weiter wichtig).
Wenn du nur einen Wert (den letzten) benötigst, dann solltest du dir nur eine Variable anlegen und dort rein speichern. Damit sollten sich all deine Hauptspeicherprobleme lösen lassen.

Zitat von LePtitmort:
Und noch ein letzten Problem, meine extended Zahlen sind immer noch zu ungenau.... wie kann ich noich grössere Genauigkeit bekommen?
Mit einem normalen Prozessor wird das schwierig. Extended hat eine etrem hohe Genauigkeit für einen Computer. Für einen Rechner ist es nicht ganz so trivial Zahlen in einer hohen Genauigkeit zu speichern. Man hat einfach nur begrenzt viele Bits, die man für eine Zahl verwenden möchte. Da mit diesen Zahlen in extrem optimierten Einheiten (also jetzt Hardware) gerechnet wird, kannst du die Anzahl der Bits auch nicht beliebig für jede Zahl ändern. Es gibt zwei Möglichkeiten, Festkommazahlen (die Genauigkeit ist durch eine feste Anzahl von Nachkommastellen gegeben), was für hohe Genauigkeit einen extrem hohen Platzbedarf impliziert und Gleitkommazahlen. Diese berechnen sich auf eine etwas weniger intuitive Art und Weise. Ich möchte hier nicht auf das Rechnen mit Mantissen eingehen, aber wichtig ist, dass du nur eine ungefähre Genauigkeit hast. Gleitkommazahlen werden natürlich ebenfalls durch konst. viele Bits kodiert, aber die abgespeicherte Genauigkeit ist flexibel. Es gibt Zahlen (z.B. die 0) die lassen sich gar nicht direkt kodieren. Wenn man nun auch noch zwei solcher Zahlen Addiert, dann folgt auch dies sehr speziellen Regeln (durch die Art der Speicherung). Hierbei dominieren große Zahlen kleinere total. Ein Beispiel wäre es, dass du 1000 sehr sehr kleine Zahlen (<< 1) mit einer anderen Zahl (z.B. der 1) addieren möchtest.
Würdest du die Zahlen so addieren, dass du jede der 1000 Zahlen nach einander zur 1 hinzu addierst, wäre dein Ergebnis = 1, würdest du die Zahlen hingegen aufsteigend summieren (immer die beiden kleinsten, bis du die Summe über alle 1000 hast), dann wäre dein Ergebnis sehr viel genauer z.B. 1,0273.
Das Problem ist einfach, dass du dich bei der Gleitkommadarstellung auf die verwendeten Nach- und Vorkommastellen festlegen musst. Möchte wie gesagt nicht näher darauf eingehen, ist einfach so (findest du ganz schnell bei Google, wikipedia, ...)

Was das Speichern deiner Werte angeht, so solltest du sie tunlichst nicht im Speicher lassen. Wie du sie wohin bannst ist eigentlich egal. Es gibt ein Menge Möglichkeiten, die einfachsten und sinnvollsten wären Datenbanken oder Streams (Beides hier schon angesprochen). Wenn du einen FileStream verwendest, so werden die Daten direkt auf die Festplatte geschrieben. Natürlich mögen 900 GByte etwas sehr groß sein, aber es gibt natürlich auch für Delphi einfache zip-Komponenten, die dürften schon einiges kleiner kriegen. Du solltest allerdings auch hier Versuchen die einzelnen Dateien nicht zu groß zu machen. Insbesondere wenn du nicht regelmässig auf die Daten zugreifst, solltest du dir überlegen ob du die Werte nicht in viele (sinnvolle) kleine Portionen packen kannst (z.B. wären 10^6 Werte mit 10 Byte kodiert etwas unter 10 MByte groß, dass lässt sich dann sicher auch schnell entpacken und zur Verwendung auch mal kurz im Speicher halten ohne das es Probleme gibt).

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#28

Re: 100 milliarden Werte speichern!

  Alt 1. Jul 2006, 11:27
Ein kleiner Denkanstoss: Wenn die Berechnung nicht sehr lange dauert, wäre zu überlegen, ob man nicht nur die Werte speichert, die man zur Berechnung braucht. Siehe dazu auch: http://blogs.msdn.com/oldnewthing/ar...20/327369.aspx
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#29

Re: 100 milliarden Werte speichern!

  Alt 1. Jul 2006, 11:30
@Jelly
In der Prozedur LoescheArr löschst du leider nur die lokale Kopie des Arrays. Besser so:

Delphi-Quellcode:
procedure LoescheArr (var Arr: TArr); // <-- VAR-Parameter!
begin
  FillChar (Arr, SizeOf(Arr), 0) ;
end;
@LePtitmort
Bei der Verwendung einer PaintBox solltest du nur innerhalb der Methode OnPaint zeichnen. Siehe dazu auch diesen Beitrag.

Gruß Hawkeye
  Mit Zitat antworten Zitat
LePtitmort

Registriert seit: 25. Jun 2006
20 Beiträge
 
#30

Re: 100 milliarden Werte speichern!

  Alt 1. Jul 2006, 13:42
Wowow. super Tipps tolle Ideen bereits dabei.
-ich steck schon immer in der Scheisse nur die Tiefe wechselt-
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    


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 08:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz