Matrix in C, welches Design ist sinnvoller
-
Ich bin dabei einen Raytracer in C zu schreiben und hapere gerade an der perfekten Struktur. Will mir im nachhinein keine Probleme durch doofe Struktur einbauen.
Daher hab ich bisher 2 Ansätze.
Einmal könnte ich typedef array benutzen und mit Convienience Methoden diese benutzen, welche dann auf interne Methoden zugreifen, welche die Logik für NxN Matrizen machen.
Hat den Nachteil, dass folgende Methode kein Typesafety hat:void mulMatrix(int8_t rowsA, int8_t colsA, float a[rowsA][colsA], int8_t rowsB, int8_t colsB, float b[rowsB][colsB], float result[rowsB][colsB]);
Ich kann nämlich eine 2x2 in result stecken, obwohl A und B beide 4x4 sind.
Außerdem sieht man ja, dass man kein Return machen kann, nur ein Parameter Return, ist aber nicht unbedingt ein Nachteil.Dann gäbe es noch den Ansatz von Structs, diese kann man ja returnen und ein Struct könnte NxN Matrizen abbilden, zwar mit Malloc, aber ggf. der bessere ansatz? Außerdem empfinde ich ein 1D array Sinnvoller, da man so eher auf den Cache zugreifen kann
Was würdet ihr eher anraten? Ich tendiere ein wenig zur Array Methode, diese muss auch kein Malloc benutzen. Zumindest denke ich, dass Malloc suboptimal sein könnte, liege ich da richtig?
-
BLAS und LAPACK wie so viele Libraries nutzen nur Zeiger auf Datentyp als Parameter, und die Dimensionen der Matrizen werden als zusätzliche Parameter übergeben. Wenn Du mit dem Gedanken spielst später Libraries zu nutzen, solltest Du Dir vorher anschauen, welche API diese nutzen.
-
@john-0
Will eher einfach bisschen mehr Erfahrung mit C allgemein sammeln. Das von BLAS/LAPACK klingt so wie der Array Ansatz vermute ich, aber nicht 1D, sondern 2D. Ist auch einfacher zu erweitern vermute ich mal