Hallo Leute!
Ich muß eine Berechnung für mein Tool machen. Als Datentyp habe ich mich für floats entschieden, aber aus irgendwelchen mir nicht erfindlichen Gründen gibt es irgendwann ziemlich strange Ergebnisse..
Daher hoffe ich, Ihr könnt mir helfen..
Zur Situation. Ich habe "ein" Array of Arrays float[][].
Der erste Index geht bis 26 also float[26][] und der 2. ist Variabel, soweit so gut.
Ich möchte als Ergebnis ein float[26] haben. Und zwar sollen pro Array von 0-26 die Variablen Werte aufsummiert und mit folgender Formel berechnet werden.
float = Sum (b=1 - B) F_b * cos * (PI*i*(b-0,5) / B)
die b's sind meine ganzen Werte pro Array.
Da das erste Array z.B. 1970 Einträge enthält soll es sich so berechnen:
Wert_1 * cos * (PI*1*(1-0,5) / 1970)
Wert_2 * cos * (PI*1*(2-0,5) / 1970)
etc...
fürs. 2. Array (Größe z.B. 2500) so:
Wert_1 * cos * (PI*2*(1-0,5) / 2500)
Wert_2 * cos * (PI*2*(2-0,5) / 2500)
etc...
Ich habe das in Java wie folgt implementiert:
Kurz zum Code..
Ich lese mir mein Array of Arrays float[26][] mit der for-schleife aus.
Gucke zunächst, wie viele Einträge ich habe, da ich das Array mit einer zu großen festen Größe initialisiert habe. Ich gebe zu, das ist vermutlich etwas unsauber, aber das soll hier nicht das Problem sein.
Mit der 2. for-schleife lese ich dann das 2. Array aus und berechne und summiere die Werte auf, um Sie nachher im neuen Array of floats[] abzuspeichern.
Jetzt habe ich das Problem, daß ich für meine erstes i also float[1][] insgesamt 1970 Werte habe. Die ersten 985 Werte werden alle korrekt berechnet und aufsummiert.
Aber ab 986 bekomme ich immer relativ hohe negative Werte, so daß die Gesamtsumme negativ werden würde.
Und das obwohl ich meine Werte VORHER als Betrag genommen habe. Habe auch in mein Eingangs- Array of Arrays geguckt, da sieht alles ganz normal aus.
Und interessanterweise fängt er immer an 2er Potenzen an falsch zu rechnen:
Also im ersten Array bei 1970 / 2 = 985
dann bei Array.length / 4
dann bei Array.length / 6
dann bei Array.length / 8
usw.
Ich hoffe, ich konnte mich halbwegs verständlich ausdrücken und hoffe noch viel mehr, daß mir jemand helfen kann..
Ich danke Euch schonmal!!
Gruß, Bazilinho
Ich muß eine Berechnung für mein Tool machen. Als Datentyp habe ich mich für floats entschieden, aber aus irgendwelchen mir nicht erfindlichen Gründen gibt es irgendwann ziemlich strange Ergebnisse..
Daher hoffe ich, Ihr könnt mir helfen..
Zur Situation. Ich habe "ein" Array of Arrays float[][].
Der erste Index geht bis 26 also float[26][] und der 2. ist Variabel, soweit so gut.
Ich möchte als Ergebnis ein float[26] haben. Und zwar sollen pro Array von 0-26 die Variablen Werte aufsummiert und mit folgender Formel berechnet werden.
float = Sum (b=1 - B) F_b * cos * (PI*i*(b-0,5) / B)
die b's sind meine ganzen Werte pro Array.
Da das erste Array z.B. 1970 Einträge enthält soll es sich so berechnen:
Wert_1 * cos * (PI*1*(1-0,5) / 1970)
Wert_2 * cos * (PI*1*(2-0,5) / 1970)
etc...
fürs. 2. Array (Größe z.B. 2500) so:
Wert_1 * cos * (PI*2*(1-0,5) / 2500)
Wert_2 * cos * (PI*2*(2-0,5) / 2500)
etc...
Ich habe das in Java wie folgt implementiert:
Java:
for (int koeff_nr = 1; koeff_nr <26; koeff_nr++) {
int length_count = 0;
for (int i = 0; i <data_in[(koeff_nr-1)].length; i++) {
if (data_in[koeff_nr][i] == 0.0) {
length_count = i-1;
break;
}
}
for (int koeffs = 0; koeffs < (length_count); koeffs++) {
if (DCT_Koeffizienten[koeff_nr] == 0.0) {
DCT_Koeffizienten[koeff_nr] = (float) (data_in[koeff_nr][koeffs]*Math.cos((Math.PI*koeff_nr*(koeffs-0.5)) / length_count));
}
else {
DCT_Koeffizienten[koeff_nr] = DCT_Koeffizienten[koeff_nr] + (float) (data_in[koeff_nr][koeffs]*Math.cos(Math.PI*koeff_nr*(koeffs-0.5) / length_count));
}
}
}
Kurz zum Code..
Ich lese mir mein Array of Arrays float[26][] mit der for-schleife aus.
Gucke zunächst, wie viele Einträge ich habe, da ich das Array mit einer zu großen festen Größe initialisiert habe. Ich gebe zu, das ist vermutlich etwas unsauber, aber das soll hier nicht das Problem sein.
Mit der 2. for-schleife lese ich dann das 2. Array aus und berechne und summiere die Werte auf, um Sie nachher im neuen Array of floats[] abzuspeichern.
Jetzt habe ich das Problem, daß ich für meine erstes i also float[1][] insgesamt 1970 Werte habe. Die ersten 985 Werte werden alle korrekt berechnet und aufsummiert.
Aber ab 986 bekomme ich immer relativ hohe negative Werte, so daß die Gesamtsumme negativ werden würde.
Und das obwohl ich meine Werte VORHER als Betrag genommen habe. Habe auch in mein Eingangs- Array of Arrays geguckt, da sieht alles ganz normal aus.
Und interessanterweise fängt er immer an 2er Potenzen an falsch zu rechnen:
Also im ersten Array bei 1970 / 2 = 985
dann bei Array.length / 4
dann bei Array.length / 6
dann bei Array.length / 8
usw.
Ich hoffe, ich konnte mich halbwegs verständlich ausdrücken und hoffe noch viel mehr, daß mir jemand helfen kann..
Ich danke Euch schonmal!!
Gruß, Bazilinho