abonnement Unibet Coolblue Bitvavo
pi_115749052
Of rand() goed is hangt af van de compilercollectie. gsl_rng_rand heeft/had bijvoorbeeld een duidelijk probleem. IBM's randu-functie was schijnbaar ook niet zo'n succes. Met een beetje ongeluk kom je ze nog tegen in de praktijk.
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115775211
quote:
3s.gif Op zondag 19 augustus 2012 12:14 schreef trancethrust het volgende:
GSL is doorgaans wat makkelijker in gebruik.
Meneer zit op Windows... :P
pi_115777287
quote:
0s.gif Op zondag 19 augustus 2012 15:04 schreef GS42 het volgende:

[..]

Misschien een beetje laat, maar over het algemeen is rand() een prima bron voor random getallen en alleen in geval van beveiliging kan ik me voorstellen dat je een betere random number generator wilt gebruiken.

Waarom heb je het idee dat de de getallen "niet zo random lijken"? En waarvoor wil je het gebruiken?
Ik heb het nodig voor statistische technieken in de wiskunde, waarbij ik heel snel achter elkaar random numbers wil genereren die niet van elkaar afhankelijk zijn. Dat lukte me niet met srand met de tijd als seed als ik het heel snel achter elkaar deed. Ik zag iedere keer ongeveer hetzelfde patroon erin zitten. Op google vond ik ook dat je voor serieuze taken beter iets anders gebruikt.
pi_115777578
quote:
0s.gif Op maandag 20 augustus 2012 10:47 schreef t4rt4rus het volgende:

[..]

Meneer zit op Windows... :P
Dan wordt het ook moeilijker dan noodzakelijk.

quote:
0s.gif Op maandag 20 augustus 2012 11:56 schreef thenxero het volgende:

[..]

Ik heb het nodig voor statistische technieken in de wiskunde, waarbij ik heel snel achter elkaar random numbers wil genereren die niet van elkaar afhankelijk zijn.
...
Dat komt omdat (zelfs al gebruikt je installatie een betere RNG dan de twee die ik hierboven als voorbeeld aanhaalde), doordat rand() doorgaans een linear congruential RNG (LC-RNG) is. Als ik een gok doe dan ben je bezig met monte-carlo methoden, en voor zulke punt-gebaseerde methodes kun je bewijzen dat voor elke LC-RNG altijd een dimensie d is waarvoor de gegenereerde punten rond vlakken in die d-dimensionale ruimte clusteren.
De oplossing is inderdaad om een niet LC-RNG te gebruiken (je kan ook de code van de wiki-pagina over de Mersenne-twister testen), of je kiest simpelweg een LC-RNG die het wel goed doet voor jouw d.

Ten tweede, als je met `heel snel' richting high-performance computing wil gaan, raad ik je ten sterkste aan toch op linux verder te gaan. Je krijgt simpelweg betere performance (zeker wanneer je multithreaded gaat) en in de industrie zelf (incl. de academici overigens) is er nagenoeg niemand die serieus in Windows werkt.
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115778638
Oke, ik zal later naar Linux gaan kijken. Voor nu is het al een hele stap vooruit in de performance van Matlab naar C++. Voor nu voldoet mijn gedownloadde txt bestand met random numbers, en het werkt al een stuk sneller dan gehoopt, maar het is inderdaad niet ideaal.
pi_115779183
quote:
0s.gif Op maandag 20 augustus 2012 11:56 schreef thenxero het volgende:

[..]

Ik heb het nodig voor statistische technieken in de wiskunde, waarbij ik heel snel achter elkaar random numbers wil genereren die niet van elkaar afhankelijk zijn. Dat lukte me niet met srand met de tijd als seed als ik het heel snel achter elkaar deed. Ik zag iedere keer ongeveer hetzelfde patroon erin zitten. Op google vond ik ook dat je voor serieuze taken beter iets anders gebruikt.
Je gebruikt srand() toch wel maar 1 keer he? Als je rand() gebruikt in je programma, roep je maar 1 enkele keer srand() aan, als eerste statement in je main(); op een andere plek of vaker is fout.

Verder klopt het dat je voor serieuze taken beter een aparte library kan gebruiken, maar dan moet je wel erg serieus zijn. ;) Ik heb bijvoorbeeld voor mijn bachelorscriptie - een implementatie van een monte-carlo (= statistische classificatie) zoekalgoritme - gewoon de rand() gebruikt zonder problemen.
"Slechts diegene mag slopen die iets beters kan bouwen."
  dinsdag 21 augustus 2012 @ 19:08:13 #67
189216 netolk
maar dan andersom
pi_115833350
quote:
0s.gif Op maandag 20 augustus 2012 12:59 schreef GS42 het volgende:

[..]

Je gebruikt srand() toch wel maar 1 keer he? Als je rand() gebruikt in je programma, roep je maar 1 enkele keer srand() aan, als eerste statement in je main(); op een andere plek of vaker is fout.

Verder klopt het dat je voor serieuze taken beter een aparte library kan gebruiken, maar dan moet je wel erg serieus zijn. ;) Ik heb bijvoorbeeld voor mijn bachelorscriptie - een implementatie van een monte-carlo (= statistische classificatie) zoekalgoritme - gewoon de rand() gebruikt zonder problemen.
ik zou sowieso zo vaak mogelijk de std functies gebruiken ipv. zelf maken of uit externe libs halen
Beware of the Raping Zebra's
pi_116017028
Ik heb een txt-bestandje gemaakt waarbij getallen links staan en rechts hun priemfactoren, gescheiden door witte ruimte. Het ziet er dus uit als volgt:

1
2
3
4
5
6
7
8
9
2 2
3 3
4 2 2
5 5
6 2 3
7 7
8 2 2 2
9 3 3
10 2 5
etcetera.

Nu wil ik dit bestandje lezen en in een array zetten. Maar omdat iedere regel een andere lengte kan hebben, weet ik niet hoe ik dat moet doen. Iemand een idee?
pi_116017177
quote:
0s.gif Op zondag 26 augustus 2012 11:33 schreef thenxero het volgende:
Ik heb een txt-bestandje gemaakt waarbij getallen links staan en rechts hun priemfactoren, gescheiden door witte ruimte. Het ziet er dus uit als volgt:
[ code verwijderd ]

etcetera.

Nu wil ik dit bestandje lezen en in een array zetten. Maar omdat iedere regel een andere lengte kan hebben, weet ik niet hoe ik dat moet doen. Iemand een idee?
Waarom geen vector gebruiken?
pi_116017883
quote:
0s.gif Op zondag 26 augustus 2012 11:33 schreef thenxero het volgende:
Ik heb een txt-bestandje gemaakt waarbij getallen links staan en rechts hun priemfactoren, gescheiden door witte ruimte. Het ziet er dus uit als volgt:
[ code verwijderd ]

etcetera.

Nu wil ik dit bestandje lezen en in een array zetten. Maar omdat iedere regel een andere lengte kan hebben, weet ik niet hoe ik dat moet doen. Iemand een idee?
Gaat het om het inlezen of om het opslaan? De oplossing voor het tweede is al gegeven door thabit: gewoon een vector gebruiken in plaats van een array. Het inlezen zou ik als volgt doen:

Het bestand per regel inlezen met getline (díe getline, er is ook een andere). Per regel stop je dan de string die je hebt gelezen in een std::istringstream. Uit de stringstream kan je daarna getallen halen met operator>>.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116019780
quote:
0s.gif Op zondag 26 augustus 2012 12:06 schreef GS42 het volgende:

[..]

Gaat het om het inlezen of om het opslaan? De oplossing voor het tweede is al gegeven door thabit: gewoon een vector gebruiken in plaats van een array. Het inlezen zou ik als volgt doen:

Het bestand per regel inlezen met getline (díe getline, er is ook een andere). Per regel stop je dan de string die je hebt gelezen in een std::istringstream. Uit de stringstream kan je daarna getallen halen met operator>>.
Ik zou std::getline gebruiken en niet std::basic_istream::getline.
http://en.cppreference.com/w/cpp/string/basic_string/getline
pi_116019868
quote:
0s.gif Op zondag 26 augustus 2012 13:03 schreef t4rt4rus het volgende:

[..]

Ik zou std::getline gebruiken en niet std::basic_istream::getline.
http://en.cppreference.com/w/cpp/string/basic_string/getline
Dan zijn we het eens: jouw getline is dezelfde als de mijne. ;)
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116020201
quote:
0s.gif Op zondag 26 augustus 2012 13:06 schreef GS42 het volgende:

[..]

Dan zijn we het eens: jouw getline is dezelfde als de mijne. ;)
Als ik op die link van je klik kom ik toch ergens anders uit.

edit:

ohnee toch niet :P
pi_116020349
De reden dat ik het met een array wilde doen is omdat ik dezelfde 'layout' wil als in dat textbestand: een 2-dimensionaal ding. Met vector heb je altijd 1 dimensie voor zover ik weet.
pi_116020443
quote:
0s.gif Op zondag 26 augustus 2012 13:20 schreef thenxero het volgende:
De reden dat ik het met een array wilde doen is omdat ik dezelfde 'layout' wil als in dat textbestand: een 2-dimensionaal ding. Met vector heb je altijd 1 dimensie voor zover ik weet.
1std::vector< std::vector<unsigned> >

Als je wilt kan het ook in een array van unsigned-pointers, maar dan moet je dynamisch alloceren en ergens de lengte van elke array opslaan om deze te kunnen gebruiken.

Oh, eventueel zou je ook een array van vectoren kunnen gebruiken, als je weet hoeveel regels je bestand heeft en dit niet verandert.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116020770
Oh okay, vector in vector kan ik wel proberen (wist niet dat dat kon).

Het probleem wat ik nog heb is dat je met getline een string krijgt die de hele regel bevat. Ik weet wel dat ik met string_naam[x] toegang krijg tot element x, maar hoe scheidt ik het best alle integers?
pi_116021090
quote:
0s.gif Op zondag 26 augustus 2012 13:32 schreef thenxero het volgende:
Oh okay, vector in vector kan ik wel proberen (wist niet dat dat kon).

Het probleem wat ik nog heb is dat je met getline een string krijgt die de hele regel bevat. Ik weet wel dat ik met string_naam[x] toegang krijg tot element x, maar hoe scheidt ik het best alle integers?
Jahoor, vrijwel alles kan in een vector. Uit mijn hoofd is alleen een (non-throwing) copy constructor vereist.

quote:
0s.gif Op zondag 26 augustus 2012 12:06 schreef GS42 het volgende:

[..]

Het bestand per regel inlezen met getline (díe getline, er is ook een andere). Per regel stop je dan de string die je hebt gelezen in een std::istringstream. Uit de stringstream kan je daarna getallen halen met operator>>.
Had je problemen met de istringstream methode? Volgens mij vraag je namelijk naar bovenstaande, maar misschien was ik onduidelijk of snap ik je vraag niet.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116021306
quote:
0s.gif Op zondag 26 augustus 2012 13:40 schreef GS42 het volgende:
[..]

Had je problemen met de istringstream methode? Volgens mij vraag je namelijk naar bovenstaande, maar misschien was ik onduidelijk of snap ik je vraag niet.
Ja klopt, ik weet niet hoe dat werkt. Een korte voorbeeldcode zou wel fijn zijn.
pi_116021733
quote:
0s.gif Op zondag 26 augustus 2012 13:46 schreef thenxero het volgende:

[..]

Ja klopt, ik weet niet hoe dat werkt. Een korte voorbeeldcode zou wel fijn zijn.
Nou, okay dan. ;)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <string> // for std::string, std::getline
#include <fstream> // for std::ifstream
#include <sstream> // for std::istringstream

int main() {

    // open file
    std::ifstream file("input.txt");

    // read file per line
    std::string line;
    while (std::getline(file, line)) {
        // now [line] contains a line from input.txt
        
        // create istringstream filled with [line]
        std::istringstream iss(line);
        
        // extract all numbers from [iss]
        unsigned temp;
        while (iss >> temp)
            std::cout << temp << ' ';

        std::cout << '\n';
    }
}

Dit moet op jouw bestandsformaat werken. De truc zit in de istringstream: deze neemt een string en doet zich daarna voor als istream. Hierdoor kan je uit het object lezen alsof het een bestand is. De istringstream en ostringstream (doet het tegenovergestelde) zijn vrij nuttig en het is een goed idee je er eens in te verdiepen.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116022135
Bedankt! Weet je misschien een site waar dit allemaal helder uitgelegd wordt? Er zijn zoveel dingen... istream ifstream ofstream ostream getline cin cout << >> stringstream dat ik de bomen door het bos niet meer zie.

En wat betekent 'unsigned temp' precies? Ik weet wel dat je unsigned kan gebruiken in combinatie met int, bijvoorbeeld 'unsigned int'. Maar wat als er geen type na unsigned komt?
pi_116022395
quote:
0s.gif Op zondag 26 augustus 2012 14:07 schreef thenxero het volgende:
Bedankt! Weet je misschien een site waar dit allemaal helder uitgelegd wordt? Er zijn zoveel dingen... istream ifstream ofstream ostream getline cin cout << >> stringstream dat ik de bomen door het bos niet meer zie.
In de OP (hebben jullie 'em al wat uitgebreid?) staat onder andere een link naar de C++ Annotations. Volgens mij is deze pagina wel nuttig. Het is geen simpele pagina, maar dan heb je wel gelijk het volledige overzicht.

quote:
En wat betekent 'unsigned temp' precies? Ik weet wel dat je unsigned kan gebruiken in combinatie met int, bijvoorbeeld 'unsigned int'. Maar wat als er geen type na unsigned komt?
'unsigned' is hetzelfde als 'unsigned int' :P
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116022795
Het ziet er verschrikkelijk uit, maar dat zal ik maar eens gaan doorlezen dan.
pi_116023003
Als ik een class C aanmaak, implementeer ik ook meteen een functie
1std::ostream& operator<<(std::ostream&, const C&);
Handig voor testen en debuggen! Met std::cout kun je je object op het scherm zetten, en met stringstreams kun je je object in een string omzetten, mocht dat nodig zijn.
pi_116023561
quote:
14s.gif Op zondag 26 augustus 2012 14:22 schreef thenxero het volgende:
Het ziet er verschrikkelijk uit, maar dat zal ik maar eens gaan doorlezen dan.
Wat ziet er verschrikkelijk uit?
pi_116023866
quote:
0s.gif Op zondag 26 augustus 2012 14:39 schreef t4rt4rus het volgende:

[..]

Wat ziet er verschrikkelijk uit?
Die pagina met alle streams en zo. Ik vind het in het algemeen leuk om C++ te leren, maar daar zie ik tegenop. Noodzakelijk kwaad.
pi_116023919
quote:
0s.gif Op zondag 26 augustus 2012 14:46 schreef thenxero het volgende:

[..]

Die pagina met alle streams en zo. Ik vind het in het algemeen leuk om C++ te leren, maar daar zie ik tegenop. Noodzakelijk kwaad.
Het is toch overzichtelijk?
Wil je alles in kleurtjes en plaatjes ofzo...?
pi_116023980
quote:
0s.gif Op zondag 26 augustus 2012 14:47 schreef t4rt4rus het volgende:

[..]

Het is toch overzichtelijk?
Wil je alles in kleurtjes en plaatjes ofzo...?
Ja, het is ook waar ik naar op zoek was. To the point en overzichtelijk. En er zijn ook plaatjes :) . Maar leuk is anders...
pi_116024375
quote:
0s.gif Op zondag 26 augustus 2012 14:47 schreef t4rt4rus het volgende:

[..]

Het is toch overzichtelijk?
Wil je alles in kleurtjes en plaatjes ofzo...?
Ik vind het een vreselijke pagina. Het staat vol met grijze informatie, tekst en voorbeeldcode staat door elkaar en het document is gigantisch. Daarnaast worden hoofd- en bijzaken niet goed gescheiden waardoor je snel in de details van error- of formatting flags zit te kijken terwijl dit niet erg belangrijk is om te kunnen werken met streams.

Maar de informatie op zich is goed en de moeite waard om er doorheen te bijten. Ik kan me alleen prima voorstellen dat 9 op de 10 mensen er niet aan beginnen. Het is een gedetailleerd overzicht, geen tutorial.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_116024784
quote:
0s.gif Op zondag 26 augustus 2012 14:57 schreef GS42 het volgende:

[..]

Ik vind het een vreselijke pagina. Het staat vol met grijze informatie, tekst en voorbeeldcode staat door elkaar en het document is gigantisch. Daarnaast worden hoofd- en bijzaken niet goed gescheiden waardoor je snel in de details van error- of formatting flags zit te kijken terwijl dit niet erg belangrijk is om te kunnen werken met streams.

Maar de informatie op zich is goed en de moeite waard om er doorheen te bijten. Ik kan me alleen prima voorstellen dat 9 op de 10 mensen er niet aan beginnen. Het is een gedetailleerd overzicht, geen tutorial.
Gelukkig ligt het niet aan mij :7 .
pi_116028081
quote:
0s.gif Op zondag 26 augustus 2012 14:57 schreef GS42 het volgende:

[..]
Maar de informatie op zich is goed en de moeite waard om er doorheen te bijten. Ik kan me alleen prima voorstellen dat 9 op de 10 mensen er niet aan beginnen. Het is een gedetailleerd overzicht, geen tutorial.
Het is inderdaad meer een documentatie.
Ik vind dat wel lekker lezen :)

Maar misschien kan code wel in een box, is wat makkelijker lezen.
Is dat in de gedrukte versie ook niet het geval?
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')