Hi!
Das problem einer doppelten for Schleife liegt daran, dass sie sehr langsam ist. Es ist jedoch leicht möglich eine doppelte in eine einfache umzuwandeln.
Einige meinen vl, dass es keinen großen unterschied macht, aber der Unterschied ist ENORM.
Ich hab diese variante in den Sprachen C, C++(native), c#, java und pawn getestet. Das Ergebnis war überall gleich, die einfache ist schneller
Beispiel: Ich hab vor ca. nem jahr eine ShaderApi geschrieben und hab um jedes Pixel zu benutzen eine doppelte for-schleife gehabt.
Diese schreibweise ist leider weit verbreitet.
Bei dem Sobel - Operator hat diese Schreibweise bei einem Bild( 1024X768 ) ca 6-7 sekunden gedauert
Hier die Umwandlung in eine einfache for-schleife
Allein durch diese Änderung hat die ganze Operation beim Sobel-Filter gerade mal < 1 sec gedauert^^.
Zu beachten ist die Schreibweise der Berechnungen.
x wäre in beiden Fällen die innere Schleife und y die Äußere.
Hier ist jetzt der genaue Code was ihr wie ersetzen müsst:
Also ihr seht schön eine einfache for-schleife benutzen
Wenn ich mein altes Programm gefunden hab, uploade ich es mal.
-- Greenberet
Das problem einer doppelten for Schleife liegt daran, dass sie sehr langsam ist. Es ist jedoch leicht möglich eine doppelte in eine einfache umzuwandeln.
Einige meinen vl, dass es keinen großen unterschied macht, aber der Unterschied ist ENORM.
Ich hab diese variante in den Sprachen C, C++(native), c#, java und pawn getestet. Das Ergebnis war überall gleich, die einfache ist schneller

Beispiel: Ich hab vor ca. nem jahr eine ShaderApi geschrieben und hab um jedes Pixel zu benutzen eine doppelte for-schleife gehabt.
Code:
for( int y = 0; x < max_y; y++ )
{
for( int x = 0; y < max_x; x++ )
{
//PAAR OPERATIONEN
}
}
Bei dem Sobel - Operator hat diese Schreibweise bei einem Bild( 1024X768 ) ca 6-7 sekunden gedauert
Hier die Umwandlung in eine einfache for-schleife
Code:
int size = max_x * max_y;
for( int i = 0; i < size; i++ )
{
int x = i % max_x;
int y = i / max_x;
//PAAR OPERATIONEN
}
Zu beachten ist die Schreibweise der Berechnungen.
x wäre in beiden Fällen die innere Schleife und y die Äußere.
Hier ist jetzt der genaue Code was ihr wie ersetzen müsst:
Code:
for( int var_aussen; var_aussen < aussen_max; var_aussen++ )
{
for( int var_innen; var_innen < innen_max; var_innen++ )
{
//...
}
}
//die gesammtgröße in eine variable speichern, da sie sonst jedes mal neu ausgerechnet werden würde.
int size = aussen_max * innen_max;
for( int i = 0; i < size; i++ )
{
int var_innen = i % innen_max;
int var_aussen = i / innen_max;
//...
}
Also ihr seht schön eine einfache for-schleife benutzen

Wenn ich mein altes Programm gefunden hab, uploade ich es mal.
-- Greenberet