Ja verbaasde mij ook alquote:
Kom maar op met de vragenquote:Op vrijdag 6 december 2013 03:42 schreef netolk het volgende:
[..]
Ja verbaasde mij ook al
Normaal was ik de gene die het actief hield met vragen
Die for-loops van jou zijn niet zo groot.quote:Op donderdag 5 december 2013 15:06 schreef Holy_Goat het volgende:
[..]
Denk het wel ja
Vind het gewoon een beetje naar om o-ve-ral die dubbele forloop te hebben (ook al is het wel sneller)
Dus daar is op zich niets op tegen? Ik dacht dat als je dingen vaak gebruikte je moest bedenken of je niet iets anders compacters moest bedenkenquote:Op vrijdag 6 december 2013 11:54 schreef t4rt4rus het volgende:
[..]
Die for-loops van jou zijn niet zo groot.
Kan je makkelijk in meerdere functies stoppen.
Sorry, momenteel met m'n minor bezig en daar moeten we een game in javaquote:
eventueel als je vaak dezelfde loops gebruikt zou je ze nog in een andere methode kunnen zetten. Soms word je code daar leesbaarder van maar dat is het dan ookquote:Op vrijdag 6 december 2013 14:06 schreef Holy_Goat het volgende:
[..]
Dus daar is op zich niets op tegen? Ik dacht dat als je dingen vaak gebruikte je moest bedenken of je niet iets anders compacters moest bedenken
Een game in Java. Ik heb echt medelijden.quote:Op vrijdag 6 december 2013 19:19 schreef netolk het volgende:
[..]
Sorry, momenteel met m'n minor bezig en daar moeten we een game in java![]()
maken
[..]
eventueel als je vaak dezelfde loops gebruikt zou je ze nog in een andere methode kunnen zetten. Soms word je code daar leesbaarder van maar dat is het dan ook
Ja, weet ook niet waarom ze dat bedacht hebben....quote:Op vrijdag 6 december 2013 19:21 schreef robin007bond het volgende:
[..]
Een game in Java. Ik heb echt medelijden.
Een beetje off-topic, maar voor een schoolproject maak ik ook een game in XNA. Wat een ramp. C++ en SFML.
C# (c sharp) misschien?quote:Op vrijdag 6 december 2013 21:38 schreef robin007bond het volgende:
Op de een of andere manier gaat OOP mij moeilijker af in C++ dan in Java. De header-files vind ik zo'n zooitje.
Als ik een C+=2 zou maken zouden die header files er definitief uit mogen.
CSharp lukt me ook prima, maar er zijn dingen waarvoor je liever C++ gebruikt.quote:Op vrijdag 6 december 2013 22:24 schreef Gehenna het volgende:
[..]
C# (c sharp) misschien?
En anders Python proberen
Java is dan ook mijn favoriet, maar serieus, die header files zijn heus zo erg niet.quote:Op vrijdag 6 december 2013 21:38 schreef robin007bond het volgende:
Op de een of andere manier gaat OOP mij moeilijker af in C++ dan in Java. De header-files vind ik zo'n zooitje.
Als ik een C+=2 zou maken zouden die header files er definitief uit mogen.
Als ik eerlijk ben vind ik het echt een last.quote:Op vrijdag 6 december 2013 23:21 schreef Crutch het volgende:
[..]
Java is dan ook mijn favoriet, maar serieus, die header files zijn heus zo erg niet.
tja het is maar een regeltje per toegevoegde functie, is dat nu echt zo erg? (toegegeven het is niet ideaal vanaf de programmeurs kant gezien)quote:Op vrijdag 6 december 2013 23:48 schreef robin007bond het volgende:
[..]
Als ik eerlijk ben vind ik het echt een last.
En het verschil tussen een abstracte klasse in Java en een Virtual in C++ is me na wat ingelezen te hebben ook niet zo duidelijk.
Maar de headers, tsja. Elke keer als je iets toevoegt moet je ook gelijk de headers aanpassen. Het werkt echt contraproductief.
| 1 2 3 4 | int daysInstalled = util.getDaysInstalled(context); int random = new Random().nextInt(10); if (random == 0 & daysInstalled > 2) { |
Absoluut niet. Groot verschil is hierbij dat booleans in C gewoon een integraal datatype zijn en (in C++) automatisch gepromoveerd worden tot integers voor bitwise berekeningen, terwijl in Java er een aparte overload is voor bitwise & op boolean types. In C evalueert bitwise & altijd tot een integer type, terwijl in dit geval Java een Boolean type teruggeeft.quote:Op zaterdag 7 december 2013 11:45 schreef MichielPH het volgende:
volgens mij komen C en Java op dit basale niveau precies overeen
Ah, leuk om te weten!quote:Op zaterdag 7 december 2013 11:58 schreef GS42 het volgende:
[..]
Absoluut niet. Groot verschil is hierbij dat booleans in C gewoon een integraal datatype zijn en gepromoveerd worden tot integers voor bitwise berekeningen, terwijl in Java er een aparte overload is voor bitwise & op boolean types. In C evaluaeert bitwise & altijd tot een integraal type, terwijl in dit geval Java een Boolean type teruggeeft.
Ik had zelf ook verwacht dat het resultaat niet anders zou zijn. Toch komt daysInstalled met waarden van -1, 0, 1, 2 en groter voor in m'n logs, dus er gaat iets mis. Ik kan met 100% zekerheid zeggen dat dat gelogd wordt doordat die statement true is.quote:> Wat gaat er mis?
In jouw voorbeeld, grappig genoeg: niets. De code werkt precies hetzelfde met & of &&, met als enige uitzondering dat bij (A & B) altijd zowel A als B geevalueerd wordt, terwijl bij (A && B) de waarde van B alleen wordt geevalueerd als A true is. Dit gedrag van && heet "short circuiting". Aangezien jouw vergelijkingen geen bijwerkingen hebben, is het resultaat hetzelfde (maar iets minder efficient).
Zie http://docs.oracle.com/ja(...)-15.html#jls-15.22.2 voor details.
(Let op lezers: we hebben het nog steeds over Java.)quote:Op zaterdag 7 december 2013 12:13 schreef MichielPH het volgende:
Ik had zelf ook verwacht dat het resultaat niet anders zou zijn. Toch komt daysInstalled met waarden van -1, 0, 1, 2 en groter voor in m'n logs, dus er gaat iets mis. Ik kan met 100% zekerheid zeggen dat dat gelogd wordt doordat die statement true is.
| 1 2 3 4 5 6 7 8 | for (size_t y = 0; y < p_Par->Xtion.CanvasYRes;y=y++) { float* My = (p_OpenNiDataObj->ZMatrix).ptr<float>(y); for (size_t x = 0; x < p_Par->Xtion.CanvasXRes; x = x++) { float& Myx = My[x]; doe dingen met Myx } } |
| 1 2 3 4 5 6 7 8 9 10 | for (size_t y = 0; y < p_Par->Xtion.CanvasYRes;y=y++) { float* My = (p_OpenNiDataObj->ZMatrix).ptr<float>(y); for (size_t x = 0; x < p_Par->Xtion.CanvasXRes; x = x++) { Doe dingen met *My My++; //increment de pointer dus, ipv My[x] in een Myx reference zetten } } |
| 1 2 3 4 5 6 7 8 9 10 11 12 | if (waarde==0) { //doe niets, en de waarde 0 komt 90% van de tijd voor } else if ( waarde == 1 ) { //doe iets met betrekking op gevonden waarde 1, komt 5% van de tijd voor } else if ( waarde == 2) { //doe iets met betrekking op gevonden waarde 2, komt het minst voor } |
| 1 2 3 4 5 6 7 8 | if ( waarde == 1 ) { //doe iets met betrekking op gevonden waarde 1, komt 5% van de tijd voor } else if ( waarde == 2) { //doe iets met betrekking op gevonden waarde 2, komt het minst voor } |
Je zou zeggen van wel, en vroeger was dit ook vaak het geval. Maar tegenwoordig blijkt dat dit vooral aan de processor ligt waarmee je werkt. Ik zou zeggen probeer beide eens. Timer functie erom heen en kijk welke het snelst is (ik ben zelf ook wel benieuwd)quote:Op maandag 9 december 2013 09:56 schreef Holy_Goat het volgende:
Bonusvraag:
De Matrices waar ik mee werk zijn 320x240, en bevatten float data. Echter, de punten achter de komma zijn voor mij volkomen irrelevant.
Zou het programma met de vele loops die dus ook de vele float waarden aandoet er veel sneller van worden op het moment dat ik de matrices bij het verkrijgen al om zou zetten naar signed int zodat het complete programma met ints werkt?
Omdat er geen operatie bij if(waarde == 0) wordt gedaan, wordt deze if bij (verre weg de meeste) compilers weggegooid bij de optimalisatie. Dus er zal als het goed is geen verschil zijn in de performance tussen beide algoritmes.quote:Bonusvraag2: (triviaal?)
Ik weet dat de volgorde van if/else if statements de performance kan beinvloeden. De eerste statement voor wat je verwacht dat het vaakst gaat voorkomen, de tweede wat je iets minder vaak verwacht, etc.
Maar het gebeurt ook wel dat je waarden tegenkomt (vaak!) waar je niets mee doen wilt.
Is bovenste code dan beter dan de onderste?
[ code verwijderd ]
[ code verwijderd ]
Dan maak je er ints van, ook al maakt het niets uit qua snelheid.quote:Op maandag 9 december 2013 09:56 schreef Holy_Goat het volgende:
Bonusvraag:
De Matrices waar ik mee werk zijn 320x240, en bevatten float data. Echter, de punten achter de komma zijn voor mij volkomen irrelevant.
switch/case. Of je gaat richting ijle matrices voor de minder-voorkomende waarden?quote:...
Bonusvraag2: (triviaal?)
Ik weet dat de volgorde van if/else if statements de performance kan beinvloeden. De eerste statement voor wat je verwacht dat het vaakst gaat voorkomen, de tweede wat je iets minder vaak verwacht, etc.
Maar het gebeurt ook wel dat je waarden tegenkomt (vaak!) waar je niets mee doen wilt.
Is bovenste code dan beter dan de onderste?
[ code verwijderd ]
[ code verwijderd ]
Hoe kun je dan het beste er voor zorgen dat het proces zo min mogelijk tijd kwijt is bij tegenkomen van een 0? Anders gaat ie voor elke 0 toch allebei de ifs checkenquote:Op maandag 9 december 2013 10:42 schreef Gehenna het volgende:
[..]
Je zou zeggen van wel, en vroeger was dit ook vaak het geval. Maar tegenwoordig blijkt dat dit vooral aan de processor ligt waarmee je werkt. Ik zou zeggen probeer beide eens. Timer functie erom heen en kijk welke het snelst is (ik ben zelf ook wel benieuwd)
[..]
Omdat er geen operatie bij if(waarde == 0) wordt gedaan, wordt deze if bij (verre weg de meeste) compilers weggegooid bij de optimalisatie. Dus er zal als het goed is geen verschil zijn in de performance tussen beide algoritmes.
Verder is de volgorde van de if statements idd wel iets wat je in je achterhoofd wil houden, je moet zorgen dat wat het vaakst voorkomt ook als eerste wordt geëvalueerd.
Dat geld ook voor 'nested conditions' zoals:
if ( (A && B) || (C && D) )
waarbij geld:
1. if A is false, goto 3.
2. if B is true, return true.
3. if C is false, return false.
4. if D is false, return false
| 1 2 3 4 5 6 7 8 9 10 11 12 | #define RED(x) ((x)&0xff) #define GREEN(x) (((x)&0xff)<<8) #define BLUE(x) (((x)&0xff)<<16) static const unsigned c_width = 320; static const unsigned c_height = 240; unsigend long canvas[c_width * c_height] = {0}; unsigned long *pix = canvas; for(int y=0; y<c_height; y++) for(int x=0; x<c_width; x++) *pix++ = RED(x / 2) | GREEN(y/2); |
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |