Array[][] mit einem Wert füllen.



  • Hallo Leute,

    ich habe ein double Array: A[][] dass ich möglichst effizient mit dem Wert 1 füllen möchte.

    Es sieht so aus.

    | a 1.0 |
    | a 1.0 |
    | a 1.0 |
    und so weiter

    Man könnte das Ganze in einer for Schleife durchführen.
    Verliere ich dadurch CPU Ticks oder erkennt es der Compiler automatisch, dass immer der gleiche Wert verwendet wird?

    Würde es mit memset Funktionen portabel (Linux, Windows) abgesehen vom little endian / big Endian Problem funktionieren?

    Danke im Voraus



  • Huhu,

    bei der Compiler-Frage bin ich mir unsicher, deswegen halte ich mich zurück...

    Du könntest die Matrix auch so initialisieren:

    double x[200][200] = {0};
    


  • Sunny31 schrieb:

    Huhu,

    bei der Compiler-Frage bin ich mir unsicher, deswegen halte ich mich zurück...

    Du könntest die Matrix auch so initialisieren:

    double x[200][200] = {0};
    

    Danke für die Schnelle Anwort, kann ich dass irgendwie mit Pointern realisieren?



  • Uhh,

    da bin ich mir nicht sicher...

    double** d_arr = NULL;
    

    Wenn das nicht stimmt, hoffe ich, dass mich jemand korrigiert.

    Zu deiner memset-Frage, hab hier in irgendeinem Thread gelesen, dass dies nur mit einem int-Array funktioniert, suche gerade verzweifelt nach dem Thread.



  • Wenn's Zeiger sein sollen, ist vielleicht ein Array von Zeiger ganz gut für eine Matrix:

    double *x[200];
    

    Natürlich musst du dann noch darauf achten, dass die alle auf ein sinnvolles Ziel zeigen.

    Ist es eigentlich sehr wichtig, dass du schnell unterwegs bist; so wichtig, dass du dir die läppische Schleife nicht leisten kannst?

    Würde es mit memset Funktionen portabel (Linux, Windows) abgesehen vom little endian / big Endian Problem funktionieren?

    Das wird wohl mehr von der Maschine als vom Betriebsystem abhängen. Überlegung: ein "grosser" Prozessor hat Float-Arithmetik eingebaut, also entscheidet er auch die Darstellung. Für Gleitkommazahlen gibt's immer IEEE 754, aber so wirklich kenn ich mich da auch nicht aus. Das sind aber sicherlich "ugly internals", und portabel wird das dann sicher nicht.



  • Für Gleitkommazahlen gibt's immer IEEE 754

    Ich meinte: gibt's immerhin



  • µngbd schrieb:

    Ist es eigentlich sehr wichtig, dass du schnell unterwegs bist; so wichtig, dass du dir die läppische Schleife nicht leisten kannst?

    Sie ist etwa 40k lang und gilt für 4 Matrizen die etwa 20 mal iteriert werden.
    Also etwa 3,2Mio Schleifendurchläufe. Im Prinzip sollte es auf einem aktuellen Mehrkernsystem auch nicht lange dauern.

    Nur möchte ich, wenn ich schon C nehme, die Möglichkeiten der Optimierung so weit wie möglich nutzen.

    Also den ersten Recherchen zufolge könnte man mit memset alle Bits auf 0 setzen.
    Viele riechen jedoch nummerische Instabilitäten.



  • Aaaalso.... ich bin vom **A auf *A = A[m*dim+n] umgestiegen weil man sich damit das malloc für dass innere Array spart.

    Zum memset habe ich leider nichts ordentliches gefunden.


Anmelden zum Antworten