Matrix mit Zahlen füllen



  • @lauriMo Wat mut?



  • N muss fest stehen wenn ich damit rechnen möchte.



  • Nein, muss nicht zur compile-time feststehen damit Du damit rechnen kannst. Aber wenn's zur compile-time (vs. run-time) feststeht, dann brauchst Du auch keinen std::vector<>1). Warum glaubst Du eigentlitsch ein 2d-irgendwas zu brauchen?

    Weiter: Warum brauchst Du überhaupt a und b wenn beides Zufallszahlen enthalten und c deren Produkt sein soll? Da kannst Du c gleich mit Zufallszahlen füllen. Was Du willst macht keinen Sinn. Null.

    1) Klugscheißerabwehr: wenn das Dingsti auf den Stack passt.

    Aber sei's drum:

    #include <cstddef>
    #include <array>
    #include <iostream>
    #include <random>
    #include <algorithm>
    
    int main()
    {
    	std::size_t constexpr N { 3 };
    	std::array<double, N * N> a {};
    	std::array<double, N * N> b {};
    
    	std::cout << "before filling with random numbers:\na:\n";
    	for (decltype(a)::size_type i{}; i != a.size(); ++i) {
    		std::cout << a[i] << ' ';
    		if ((i + 1) % N == 0)
    			std::cout.put('\n');
    	}
    
    	std::cout << "\nb:\n";
    	for (decltype(b)::size_type i{}; i != b.size(); ++i) {
    		std::cout << b[i] << ' ';
    		if ((i + 1) % N == 0)
    			std::cout.put('\n');
    	}
    
    	std::random_device rd;
    	std::generate(a.begin(), a.end(), [&]() { return std::uniform_real_distribution<double>{ 0., 100. }(rd); });
    	std::generate(b.begin(), b.end(), [&]() { return std::uniform_real_distribution<double>{ 0., 100. }(rd); });
    
    	std::cout << "\n\nafter filling with random numbers:\na:\n";
    	for (decltype(a)::size_type i{}; i != a.size(); ++i) {
    		std::cout << a[i] << ' ';
    		if ((i + 1) % N == 0)
    			std::cout.put('\n');
    	}
    
    	std::cout << "\nb:\n";
    	for (decltype(b)::size_type i{}; i != b.size(); ++i) {
    		std::cout << b[i] << ' ';
    		if ((i + 1) % N == 0)
    			std::cout.put('\n');
    	}
    
    	std::array<double, N * N> c { a };
    	std::transform(a.begin(), a.end(), b.begin(), c.begin(), [](auto lhs, auto rhs) { return lhs * rhs; });
    
    	std::cout << "\n\nresult:\nc:\n";
    	for (decltype(c)::size_type i{}; i != c.size(); ++i) {
    		std::cout << c[i] << ' ';
    		if ((i + 1) % N == 0)
    			std::cout.put('\n');
    	}
    }
    

    Sample Output:

    before filling with random numbers:
    a:
    0 0 0
    0 0 0
    0 0 0
    
    b:
    0 0 0
    0 0 0
    0 0 0
    
    
    after filling with random numbers:
    a:
    86.8078 42.2466 30.9909
    5.59847 47.2806 37.5735
    90.3041 95.5185 0.0146773
    
    b:
    45.3534 30.7286 37.849
    87.1815 7.62351 76.5596
    55.8694 54.9992 85.2025
    
    
    result:
    c:
    3937.02 1298.18 1172.98
    488.083 360.444 2876.61
    5045.24 5253.44 1.25055
    

    // edit: Ach so, Matrizen multipliziert man ja anderster. Naja, what shalls.



  • Vorsicht mit std::random_device... Mancher Kompiler bekommt es nicht hin, diese Klasse korrekt zu implementieren hust MinGW hust



  • Wat hat der Compiler mit der Implementifizierung von std::random_device zu tun?



  • @hustbaer Naja, das war wohl flapsig ausgedrückt. Die Standartbibliothek die mit dem MinGW-gcc (und auch mingw64) kommt ist halt in dieser Hinsicht buggy, wenn man so will. Andreaseits kann man den Standart auch so auslegen daß es absolut kosher ist, was sie tut. *shrugs_shoulders* *runs*



  • Soso. Wo fehlt's denn? Macht mal Bug-Ticket oder Pull-Request.



  • @hustbaer https://sourceforge.net/p/mingw-w64/bugs/338/

    Guten Morgen btw.

    Aber ich habe sowieso noch nicht kapiert warum jemand auf Windows auf biegen und brechen MinGW-Zeugs haben will. Spätestens mit WSL könnte (sollte?) das Zeugs Geschichte sein dürfen. Was will ich MinGW wenn ich gcc, clang, whatever nativ auf linux haben kann?



  • @Swordfish Wow, die Leute die da kommentieren (bei dem MinGW Bug Ticket)... da sind schon ein paar ganz besonders helle Leuchten dabei 🙂

    Und ps: GCC bzw. Clang auf Windows haben wollen verstehe ich voll und ganz. Wieso sollte man nicht gute, freie, alternative Compiler auf Windows für native Windows Anwendungen haben wollen? Und ebenso: Wieso sollte man nicht eine alternative STL auf Windows haben wollen?



  • @hustbaer sagte in Matrix mit Zahlen füllen:

    Wow, die Leute die da kommentieren (bei dem MinGW Bug Ticket)... da sind schon ein paar ganz besonders helle Leuchten dabei

    Ja. Ich übe immer noch ignorieren. Wir mit unseren Leuchten hier brauchen sowieso nicht groß reden.

    @hustbaer sagte in Matrix mit Zahlen füllen:

    GCC bzw. Clang auf Windows haben wollen verstehe ich voll und ganz. Wieso sollte man nicht gute, freie, alternative Compiler auf Windows für native Windows Anwendungen haben wollen?

    Clang/LLVM Support in Visual Studio. Ich meinte aber eigentlich gcc/clang unter WSL. Interop mit den anderen Subsystems soll angeblich auch irgendwie funktionieren. Frag mich nicht, hab' noch nicht damit gespielt. der dbus-bug hat mich abgeschreckt. *aufdenkalenderschau* sollte aber schön langsam beseitigt sein.


Log in to reply