Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

c++ - Test Pi, czy mam błąd w kodzie?

qwerty_cplusplus 28 Paź 2012 16:36 828 2
  • #1 28 Paź 2012 16:36
    qwerty_cplusplus
    Poziom 8  

    Napisałem program, robiący testy Pi dla dwóch różnych generatorów liczb pseudolosowych. Dla klucza {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0} (16 zer) oraz miliona utworzonych punktów - wyniki testu są takie:
    VMPC - 3,15538
    RC4 - 3,16022
    Czyli różnią się znacznie od liczby Pi, a powinny do niej dążyć. Eksperymentując z różnymi kluczami, jestem w stanie uzyskać liczbę Pi, z dokładnością tylko jednego miejsca po przecinku. Pojawia się pytanie, czy winne są generatory liczb pseudolosowych (sprawdziłem je wektorami testowymi, więc działają prawidłowo), czy może mam błąd w kodzie.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0 2
  • Pomocny post
    #2 28 Paź 2012 17:33
    bzyku_bd
    Poziom 12  

    W funkcji test_pi::punkt

    Linia 1:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Sprawdzasz tylko x. Prawdopodobnie chcesz sprawdzać x oraz y.

    I mała notka, w tym kodzie który wkleiłeś, pętla wykonuje się sto tysięcy razy a nie milion.


    // dodano

    Myślę, że problem dokładności w Twoim kodzie wynika ze zbyt dużego ziarna. Gdybyś wszystko robił na doublach, albo znacznie zwiększył pole kwadratu, wyniki mogłyby być lepsze.

    0
  • #3 28 Paź 2012 20:17
    qwerty_cplusplus
    Poziom 8  

    Poprawiłem wskazany błąd. Zastosowałem się też do rady zwiększenia pola kwadratu i użycia typu double. Teraz dla klucza {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}, kwadratu o boku 2^16, oraz stu milionów wywołań pętli wyniki są następujące:
    VMPC: 3, 141 55
    RC4: 3, 141 7
    Gdzie Pi równa się: 3, 141 592
    Tym razem, mogłem zaobserwować jak dokładność wyniku rośnie wraz ze zwiększaniem ilości wywołań pętli. Dzięki za pomoc.

    0