Wahrscheinlichkeit einer Summe


  • Gesperrt

    Hallo nochmal,
    also folgendes soll 0.5 ausgeben:

    // Example program
    #include <iostream>
    #include <string>
    
    bool besteht(int * maxs, int * aktuell) {
        int sum = 0;
        bool b = true;
        //const int len = sizeof(maxs) / sizeof(maxs[0]);
        const int len = 5;
        for (int i = 0; i < len; i++) {
            sum += aktuell[i];
            if ((100.0 / (double)maxs[i]) * (double)aktuell[i] < 42.0) {
                b = false;
            }
        }
        if ((sum >= 100) || (sum >= 50 && b)) {
            return true;
        } else {
            return false;
        }
    }
    
    int main()
    {
        const int m = 39; // ???
        int maxs[5] = {
            m, m, m, m, m
        };
        int aktuell[5];
        int sum = 0;
        for (int i = 0; i < 1000; i++) {
            for (int j = 0; j < 5; j++) {
                aktuell[j] = rand() % (m + 1);
            }
            std::cout << i << " " << besteht(maxs, aktuell) << "\n";
            if (besteht(maxs, aktuell))
                sum++;
        }
        std::cout << (1.0 / (1000.0 / sum)) << "\n"; // (... 0.465)
        return 0;
    }
    

    Die Frage wär, wie m (bei den drei Fragezeichen) gewählt werden muss.

    Bekannt ist:
    ((x/2)*5) Erwartungswert
    (1-0.42)^5 * ((x/2)*5) erste Wahrscheinlichkeit
    ?



  • @EinNutzer0
    Ich kenne dein Problem nicht, aber warum fragst du nicht deinen PC?

    // Example program
    #include <iostream>
    #include <string>
    
    bool besteht(int * maxs, int * aktuell) {
        int sum = 0;
        bool b = true;
        //const int len = sizeof(maxs) / sizeof(maxs[0]);
        const int len = 5;
        for (int i = 0; i < len; i++) {
            sum += aktuell[i];
            if ((100.0 / (double)maxs[i]) * (double)aktuell[i] < 42.0) {
                b = false;
            }
        }
        if ((sum >= 100) || (sum >= 50 && b)) {
            return true;
        } else {
            return false;
        }
    }
    
    
    void Test(int m)
    {
        //const int m = 39; // ???
        int maxs[5] = {
            m, m, m, m, m
        };
        int aktuell[5];
        int sum = 0;
        for (int i = 0; i < 1000; i++) {
            for (int j = 0; j < 5; j++) {
                aktuell[j] = rand() % (m + 1);
            }
            //std::cout << i << " " << besteht(maxs, aktuell) << "\n";
            if (besteht(maxs, aktuell))
                sum++;
        }
        //std::cout << (1.0 / (1000.0 / sum)) << "\n"; // (... 0.465)
    
        std::cout << "Variable m: " << m << "     " << (1.0 / (1000.0 / sum)) << "\n"; // (... 0.465)
    }
    
    int main()
    {
        for (int i = 0; i < 100; i++)
        {
            Test(i);
        }
        return 0;
    }
    

    Bei m = 40 bekomme ich 0.497 heraus, bei m = 41 0.572.


  • Gesperrt

    @Quiche-Lorraine sagte in Wahrscheinlichkeit einer Summe:

    aber warum fragst du nicht deinen PC

    Weil ich ja nach der mathematischen Gleichung dafür suche, um den genauen Wert für m zu ermitteln. Dieser kann auch "rational" sein...



  • Wenn du das rand rausnimmst und einfach enumerierst, dann ist das eine mathematische Formel. In simpel: Summe über alle Ergegnisse, 0 bei nicht bestanden, 1/Anzahl Ergebnisse bei bestanden.


  • Gesperrt

    @TGGC Kannst Du vielleicht meine Frage beantworten oder einfach Rand halten? Über irgendetwas iterieren ist keine mathematische Formel.



  • @EinNutzer0 doof?


  • Gesperrt

    Ich würde wegen eines Nonsense Beitrags von @TGGC nicht direkt von Doofheit ausgehen, aber wenn Du auch keine Antwort auf die Frage hast, wieso antwortest Du dann? Sich einfach etwas wichtig und hervor tun? Verzichtbar für mich... Geh einfach und Trolle wen anders... 🙂


  • Mod

    Ich mache hier mal zu, bevor das noch bizarrer wird...


Anmelden zum Antworten