AGB  ·  Datenschutz  ·  Impressum  







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

ständiger Fehler bei einem Array

Ein Thema von mitchel · begonnen am 21. Aug 2007 · letzter Beitrag vom 21. Aug 2007
Antwort Antwort
mitchel

Registriert seit: 30. Jul 2007
12 Beiträge
 
#1

ständiger Fehler bei einem Array

  Alt 21. Aug 2007, 08:31
Hi,
habe folgenden Code:
Delphi-Quellcode:
procedure TForm1.Button20Click(Sender: TObject);
var
  Grenz, i: Integer;
  fl: double;
  fn: double;
  NormValue: double;
  s: string;
  Summe: double;
  Hilfsarray : array[0..32768] of double;
  s2: string;

begin
  UmrFaktorFFT := tA/Zoombereich; //ta = 10000
  Str(UmrFaktorFFT:2:2,s2);
  form1.label26.caption := s2;
  if Zoombereich < 2100 then
    begin
      form1.panel5.caption := ('nicht def');
      showmessage('Zoombreich kleiner 2100 ms gewählt!' +#13+
                  'Keine Berechnung bis 20Hz möglich!');
    end
    else
    begin
      fl := UmrFaktorFFT;
      Grenz := trunc(Zoombereich / UmrFaktorFFT);
      fn := StrToInt(form1.Edit1.Text) - (2*fl);

      if form1.ComboBox2.ItemIndex = 0 then //Kanal 1 -> Kanal 2
      begin
       Summe := 0;
       for i := 2 to Grenz-1 do
       begin
         Hilfsarray[i] := abs(1-(DATAFFTai0[i] / DATAFFTai1[i]))*fl; //Hier kommt Fehler
         Summe := Summe + Hilfsarray[i];
       end;
       NormValue := 0;
       for i:= 2 to Grenz do
       NormValue := Summe * (1-(1/fn))*100;
       Str(NormValue:2:2,s);
       form1.panel5.caption := s + ' %';
      end;
    end;
end;
Es soll ein Vergleich zwischen 2 Kurven sattfinden (DATAFFTai1 und DATAFFTai0). Bei einem kleinen Zoombereich funktioniert das auch ganz gut, jedoch kommt bei größeren Werten immer die Fehlermeldung "ungültiger Gleitkommaüberlauf". Ist für mich unverständlich, da das Hilfsarray nur so um die 50 Werte beinhaltet....

Hat jemand einen Tipp, wo mein Denkfehler ist???
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: ständiger Fehler bei einem Array

  Alt 21. Aug 2007, 08:51
das Problem liegt auch eher an dem Werten, welche wohl den Wertebereich verletzen. Schon mit extended statt double versucht?
Markus Kinzler
  Mit Zitat antworten Zitat
mitchel

Registriert seit: 30. Jul 2007
12 Beiträge
 
#3

Re: ständiger Fehler bei einem Array

  Alt 21. Aug 2007, 09:46
@mkinzler
Danke für den Tipp, aber liegt leider nicht an double....
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: ständiger Fehler bei einem Array

  Alt 21. Aug 2007, 09:48
Was ist es denn für ein Fehler? Vielleicht EDivideZero?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: ständiger Fehler bei einem Array

  Alt 21. Aug 2007, 09:49
Die Fehlermeldung sagt es doch schon: Die Zahklen werden zu groß für den Datentyp. Das hat nichts mit der Größe des Arrays zu tun bzw. der Anzahl der Elemente in dem Array.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#6

Re: ständiger Fehler bei einem Array

  Alt 21. Aug 2007, 10:37
Mir fällt noch auf, daß
Grenz := trunc(Zoombereich / UmrFaktorFFT) nicht geprüft wird, Du greifst aber damit auf ein array zu, was nicht größer als 32768 sein kann. Wenn dieser Fall eintreten würde, könntest Du die verschiedensten Fehler erzeugen, je nachdem was da im Speicher steht und wem der Speicher gehört.

Grüße, Messie
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: ständiger Fehler bei einem Array

  Alt 21. Aug 2007, 10:59
Es so grosses Array (32768 * 8 = 256 kb) sollte man nicht auf dem Stack sondern dynamisch auf dem Heap anlegen.
Delphi-Quellcode:
var
  Hilfsarray : array of double;
  ...
  Grenz := trunc(Zoombereich / UmrFaktorFFT);
  SetLength(Hilfsarray, Grenz); // Grösse dynamisch festlegen
Somit ist auch sichergestellt, dass es zu keinem "Index-out-of-Range" Fehler kommen kann.
Folgende Zeilen machen IMHO keinen Sinn:
Delphi-Quellcode:
NormValue := 0; // wozu auf 0 setzen, wenn die Variable später geändert wird ?
// warum wird die Variable NormValue x-Mal mit dem gleichen Wert befüllt ?
// Summe * (1-(1/fn))*100 ist eine Konstante, da nicht abhängig von Laufvariable i
for i:= 2 to Grenz do
  NormValue := Summe * (1-(1/fn))*100;
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:49 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