TCH (statz) | #1, Főfasz (10443) |
1165 | #1770 | ^ | Idézet | Fri, 28 Oct 2011 23:45:37 +02 |
46.107.*.* | *.catv.pool.telekom.hu |
|
kemi (statz) | #2, Főfasz (2970) |
215 | #1771 | ^ | Idézet | Sat, 29 Oct 2011 09:53:27 +02 |
78.131.*.* | *.pool.hdsnet.hu |
William Henry Gates III. Amúgy ha összeadod bilgéc neve betűinek ASCII kódjait, hozzáadsz 3-at akkor 666-ot kapsz. :D A www meg úgy is olvasható, hogy VI VI VI, azaz 6 6 6, akkor nem Tim Berners Lee az antikrisztus? |
TCH (statz) | #1, Főfasz (10443) |
85 | #1772 | ^ | Idézet | Sat, 29 Oct 2011 13:35:34 +02 |
46.107.*.* | *.catv.pool.telekom.hu |
Ez csak vicc. Már egyszer kiszámoltuk, hogy sehogy nem jön ki a dolog, max trükközve. |
kemi (statz) | #2, Főfasz (2970) |
333 | #1773 | ^ | Idézet | Sat, 29 Oct 2011 14:00:26 +02 |
78.131.*.* | *.pool.hdsnet.hu |
B I L L G A T E S III 066 + 073 + 076 + 076 + 071 + 065 + 084 + 069 + 083 + 003 = 666Kijön az. De tényleg azt hiszed én komolyan gondolom? :D |
TCH (statz) | #1, Főfasz (10443) |
138 | #1774 | ^ | Idézet | Sat, 29 Oct 2011 14:08:34 +02 |
46.107.*.* | *.catv.pool.telekom.hu |
Nem, de kár rajta filozofálni. :) |
TCH (statz) | #1, Főfasz (10443) |
1010 | #1775 | ^ | Idézet | Sat, 29 Oct 2011 19:56:35 +02 |
46.107.*.* | *.catv.pool.telekom.hu |
A tegnapi alter rnd szart se ért, itt egy ami jó, kipróbáltam több seeddel is, 8192 eset alatt sem produkált ismétlést. rnd1.c: unsigned int __seed; unsigned int rol(unsigned int value, unsigned char offset) { offset = offset & 0x1f; return (value << offset) | (value >> (0x20 - offset)); } unsigned int ror(unsigned int value, unsigned char offset) { offset = offset & 0x1f; return (value >> offset) | (value << (0x20 - offset)); } unsigned int rnd1() { unsigned int x, y, z, i; x = __seed ^ 0xaaaaaaaa; x = rol(x >> 11, x); x = x ^ (x >> 21); y = __seed ^ 0x55555555; y = ror(y << 6, y); y = y ^ (y >> 22); z = (y << 16) | (x >> 16); for (i = 0; i < 4; ++i) { x = rol(x, 5); y = ror(y, 9); __seed = rol(__seed, 11); __seed ^= (x & 1 != 0 ? x : y); __seed = (y & 0x80000001 != 0 ? ~__seed : __seed); __seed = ror(__seed, 14); __seed ^= z; x ^= z; y ^= z; z = ror(z, __seed); } return __seed; } |
kemi (statz) | #2, Főfasz (2970) |
366 | #1776 | ^ | Idézet | Sun, 30 Oct 2011 09:19:03 +01 |
78.131.*.* | *.pool.hdsnet.hu |
Kipróbáltam az LXDE-t, egészen fasza, villámgyorsan futott a virtuális gépről, ellenben a KDE4-gyel, ami használhatatlan volt úgy, hogy 512 mega ramot adtam neki. Ha migrálni akarsz KDE3-ról egy próbát megér! Amúgy a win7 tálcája/startmenüje Ctrl+C Ctrl+V a KDE4-ről. Oké, a kódfelhasználást engedi a GPL, de a koncepciólopást már nem hiszem! (és a KDE4 volt előbb!) |
TCH (statz) | #1, Főfasz (10443) |
1124 | #1777 | ^ | Idézet | Sun, 30 Oct 2011 12:15:41 +01 |
46.107.*.* | *.catv.pool.telekom.hu |
Egyelőre nem akarok, amíg a Trinity projekt él és felrakható a KDE3, addig marad. De azért köszi a tippet, megnézegetem az LXDE-t, hátha van olyan jó, mint a KDE3 vagy az XFCE4. Ezt már vagy 2-3 éve tudjuk. :) A GPL tudtommal kódfelhasználást csak úgy tesz lehetővé, hogy a felhasznált kód továbbra is GPL marad, azaz elérhetővé kell tenni. Namármost, szerintem a mikrofos nem a kódját lopta el a KDE4-nek, hanem csak a koncepció egyes elemeit. Miért? Mert a win7 viszonylag (hangsúlyozom: viszonylag) gyors, a KDE4 meg überlassú. Nagy szégyen, de a mikrofos ezúttal nem kontrolcé-kontrolvézett, mert nem volt mit, a KDE4 kódja még hozzájuk képest is egy rakás fos. Ezúttal csak másoltak, nem loptak. És a szégyen, hogy a másolat kvázi jobban használható, mint az eredeti. |
TCH (statz) | #1, Főfasz (10443) |
3578 | #1778 | ^ | Idézet | Sun, 30 Oct 2011 18:29:58 +01 |
46.107.*.* | *.catv.pool.telekom.hu |
Gondoltam kitesztelem, melyik a jobb, a Linux véletlenszámgenerátora, vagy amit tegnap írtam. Két dolgot vizsgáltam, a sebességet és az ismétlés nélkül legenerált számok mennyiségét. rndtest.c: void main() { int i; for (i = 0; i < 500000000; ++i) rand(); }rndtest1.c: #include "rnd1.c" void main() { int i; for (i = 0; i < 500000000; ++i) rnd1(); }Eredmény: root@Csabi:~# gcc rndtest.c -O3 root@Csabi:~# time ./a.out real 0m14.109s user 0m14.097s sys 0m0.008s root@Csabi:~# gcc rndtest1.c -O3 root@Csabi:~# time ./a.out real 0m22.426s user 0m22.417s sys 0m0.008sVagyis 22426/14109=1.58948, azaz a Linux, illetve a libc véletlenszámgenerátora ~60%-al gyorsabb. Viszont a másik tesztben: rndtest.c: void main() { srand(0); int i, j; unsigned int l; unsigned int tbl[1048576]; for (i = 0; i < 1048576; ++i) { l = rand(); for (j = 0; j < i; ++j) { if (l == tbl[j]) { printf("%d\n", i); return; } } tbl[i] = l; } }rndtest1.c #include "rnd1.c" void main() { __seed = 0; int i, j; unsigned int l; unsigned int tbl[1048576]; for (i = 0; i < 1048576; ++i) { l = rnd1(); for (j = 0; j < i; ++j) { if (l == tbl[j]) { printf("%d\n", i); return; } } tbl[i] = l; } }Eredmény: root@Csabi:~# gcc rndtest.c -O3 root@Csabi:~# ./a.out 15357 root@Csabi:~# gcc rndtest1.c -O3 root@Csabi:~# ./a.out 1049300:1 0xb11193c1 seed értékkel: root@Csabi:~# gcc rndtest.c -O3 root@Csabi:~# ./a.out 102640 root@Csabi:~# gcc rndtest1.c -O3 root@Csabi:~# ./a.out 601081:1 0xfa52fe7 seed értékkel: root@Csabi:~# gcc rndtest.c -O3 root@Csabi:~# ./a.out 41026 root@Csabi:~# gcc rndtest1.c -O3 root@Csabi:~# ./a.out 516881:2 0xffffffff seed értékkel: root@Csabi:~# gcc rndtest.c -O3 root@Csabi:~# ./a.out 53585 root@Csabi:~# gcc rndtest1.c -O3 root@Csabi:~# ./a.out 490372:2 1 seed értékkel: root@Csabi:~# gcc rndtest.c -O3 root@Csabi:~# ./a.out 15357 root@Csabi:~# gcc rndtest1.c -O3 root@Csabi:~# ./a.out 126633:2 4743463 seed értékkel: root@Csabi:~# gcc rndtest.c -O3 root@Csabi:~# ./a.out 46003 root@Csabi:~# gcc rndtest1.c -O3 root@Csabi:~# ./a.out 1019043:3 0x986fae83 seed értékkel: root@Csabi:~# gcc rndtest.c -O3 root@Csabi:~# ./a.out 80668 root@Csabi:~# gcc rndtest1.c -O3 root@Csabi:~# ./a.out 401034:3 982357 seed értékkel: root@Csabi:~# gcc rndtest.c -O3 root@Csabi:~# ./a.out 56884 root@Csabi:~# gcc rndtest1.c -O3 root@Csabi:~# ./a.out 1043614:4 986739687 seed értékkel: root@Csabi:~# gcc rndtest.c -O3 root@Csabi:~# ./a.out 62171 root@Csabi:~# gcc rndtest1.c -O3 root@Csabi:~# ./a.out 514995:4 666 seed értékkel: root@Csabi:~# gcc rndtest.c -O3 root@Csabi:~# ./a.out 43118 root@Csabi:~# gcc rndtest1.c -O3 root@Csabi:~# ./a.out 589305:5 Az eredmény döntetlen, ha a menetek számát nézzük. Viszont, ha az összértéket (osztva 10-el az átlag), akkor: rand(): 015357+102640+041026+053585+015357+046003+080668+056884+062171+043118=516809 rnd1(): 104930+060108+051688+049037+012663+101904+040103+104361+051499+058930=635223 635223/516809=1.22913 azaz a mi véletlenszámgenerátorunk ~23%-al precízebb, mint a Linuxé. Hát ezt úgy is lehet nézni, hogy a Linuxé nagyobb sebességkülönbséget ad, mint amekkora precizitáskülönbséget a miénk, de úgy is, hogy itt a precizitás szerintem fontosabb. :P A saját konklúzióját majd mindenki magának. |
TCH (statz) | #1, Főfasz (10443) |
7110 | #1779 | ^ | Idézet | Mon, 31 Oct 2011 15:36:21 +01 |
46.107.*.* | *.catv.pool.telekom.hu |
Gondolkoztam, hogy mit lehetne fejleszteni ezen a szaron, meg közben Csárli és Boreger #amigaspiritről azt mondta, hogy a számismétlés nem gond, a pattern ismétlés az igen. Hát akkor. (Sz*rk: A változók típusát sima unsigned int-ről lecseréltem unsigned long int-re, mert az mindenütt jelöletlen 32 bites, nem csak a GCC-ben. A tesztkódokban nem bántottam, mert GCC alatt volt tesztelve. Ez semmi változást nem okoz a kódban, csak más fordítók alatt is fordulni fog.) (Sz*rk 2015: A tipust visszacseréltem, mert 64 bit alatt az unsigned long int az 64 bit. :P Egyébként az unsigned int az, ahogy néztem, Amigán és pöcén, 32 és 64 biten, egyaránt 32-bit. rnd2.c unsigned int __seed0, __seed1, __seed2, __seed3; unsigned int __rol(unsigned int value, unsigned char offset) { offset = offset & 0x1f; return (value << offset) | (value >> (0x20 - offset)); } unsigned int __ror(unsigned int value, unsigned char offset) { offset = offset & 0x1f; return (value >> offset) | (value << (0x20 - offset)); } void srnd2(unsigned int seed) { __seed0 = seed; __seed1 = __seed0 ^ 0xaaaaaaaa; __seed1 = __rol(__seed1 >> 11, __seed1); __seed1 = __seed1 ^ (__seed1 >> 21); __seed2 = __seed0 ^ 0x55555555; __seed2 = __ror(__seed2 << 6, __seed2); __seed2 = __seed2 ^ (__seed2 >> 22); __seed3 = (__seed2 << 16) | (__seed1 >> 16); } unsigned int rnd2() { __seed1 = __rol(__seed1, 5); __seed2 = __ror(__seed2, 9); __seed0 = __rol(__seed0, 11); __seed0 ^= __seed1; __seed0 ^= __rol(__seed1, 8) << 11; __seed0 ^= __ror(__seed2, 8) & 63; __seed0 ^= __rol(__seed3, 8) >> 5; __seed0 = __ror(__seed0, 14); __seed0 ^= __seed3; __seed1 ^= __seed3; __seed2 ^= __seed3; __seed3 = __ror(__seed3, __seed0); return __seed0; }Teszteljük. Először sebességet. rndstest.c void main() { int u; for (u = 0; u < 500000000; ++u) rand(); }rndstest2.c #include "rnd2.c" void main() { int u; for (u = 0; u < 500000000; ++u) rnd2(); }Eredmény: root@Csabi:~# gcc ./rndstest.c -O3 root@Csabi:~# time ./a.out real 0m13.890s user 0m13.885s sys 0m0.000s root@Csabi:~# gcc ./rndstest2.c -O3 root@Csabi:~# time ./a.out real 0m2.847s user 0m2.840s sys 0m0.000sLol. Ez aztán optimalizáció bazdmeg, 11x-es sebességnövekedés. :DDDD Lássuk az első ismétlés tesztjét. Kicsit változtattam a tesztelőkódon, hogy ne kelljen egyesével beírni a seedeket. rndtest.c: unsigned int tbl[1048576]; int first() { int i, j; unsigned int l; for (i = 0; i < 1048576; ++i) { l = rand(); for (j = 0; j < i; ++j) { if (l == tbl[j]) { return i; } } tbl[i] = l; } } void main() { const unsigned int num[] = {0, 0xb11193c1, 0xfa52fe7, 0xffffffff, 1, 4743463, 0x986fae83, 982357, 986739687, 666}; int u, t, s; s = 0; for (u = 0; u < 10; ++u) { srand(num[u]); t = first(); s += t; printf("%d\n", t); } printf("%d\n", s); }rndtest2.c: #include "rnd2.c" unsigned int tbl[1048576]; int first() { int i, j; unsigned int l; for (i = 0; i < 1048576; ++i) { l = rnd2(); for (j = 0; j < i; ++j) { if (l == tbl[j]) { return i; } } tbl[i] = l; } } void main() { const unsigned int num[] = {0, 0xb11193c1, 0xfa52fe7, 0xffffffff, 1, 4743463, 0x986fae83, 982357, 986739687, 666}; int u, t, s; s = 0; for (u = 0; u < 10; ++u) { srnd2(num[u]); t = first(); s += t; printf("%d\n", t); } printf("%d\n", s); }Eredmények (ugyanazokkal a seedekkel mint tegnap, az utolsó 11. sor az összesített) root@Csabi:~# gcc ./rndtest.c -O3 15357 102640 41026 53585 15357 46003 80668 56884 62171 43118 516809 root@Csabi:~# gcc ./rndtest2.c -O3 root@Csabi:~# ./a.out 39597 183360 25880 14782 70036 120541 71392 29256 91058 108667 7545693:7 a javunkra és az összesítettben is eléggé rávert. De ha már Csárli felhívta a figyelmemet a szórásra, akkor végezzünk el egy ilyen tesztet is. Ez a teszt azt vizsgálja, hogy a legenerált elemekből hány van meg legalább 2x, azaz hány különbözik és hány ismétlődik. Ezt nem 1 megáig néztem, mert az sose futott volna le, hanem csak 128 kilóig (azaz azt számolta, hogy 131072 "véletlen" elem közül hány ismételt, a maradék (131072-n) az egyedi) rndptest.c: unsigned int tbl[131072]; int calcrep() { int i, j, q; q = 0; unsigned int l; for (i = 0; i < 131072; ++i) { l = rand(); for (j = 0; j < i; ++j) { if (l == tbl[j]) { q++; j = i; } } tbl[i] = l; } return q; } void main() { const unsigned int num[] = {0, 0xb11193c1, 0xfa52fe7, 0xffffffff, 1, 4743463, 0x986fae83, 982357, 986739687, 666}; int u, t, s; s = 0; for (u = 0; u < 10; ++u) { srand(num[u]); t = calcrep(); s += t; printf("%d\n", t); } printf("%d\n", s); }rndptest2.c: #include "rnd2.c" unsigned int tbl[131072]; int calcrep() { int i, j, q; q = 0; unsigned int l; for (i = 0; i < 131072; ++i) { l = rnd2(); for (j = 0; j < i; ++j) { if (l == tbl[j]) { q++; j = i; } } tbl[i] = l; } return q; } void main() { const unsigned int num[] = {0, 0xb11193c1, 0xfa52fe7, 0xffffffff, 1, 4743463, 0x986fae83, 982357, 986739687, 666}; int u, t, s; s = 0; for (u = 0; u < 10; ++u) { srnd2(num[u]); t = calcrep(); s += t; printf("%d\n", t); } printf("%d\n", s); }És az eredmény (újfennt ugyanazokkal a seedekkel): root@Csabi:~# gcc ./rndptest.c -O3 root@Csabi:~# ./a.out 6 2 6 5 6 1 2 2 3 7 40 root@Csabi:~# gcc ./rndptest2.c -O3 root@Csabi:~# ./a.out 2 0 2 4 2 1 1 2 2 2 181:9 és az az 1 pont is két döntetlenből volt. Az eredmény magáért beszél. :) Konklúzió: Az rnd2() közel 5x olyan gyors, mint a libc rand(), az esetek 90%-ában kevesebb ismétlést ad és átlagosan kevesebb mint feleannyi ismétlést ad. Énszerintem ez egyértelmű zsírkarajság. :))) 68k verzió: srnd2 move.l d0, d1 eor.l #$aaaaaaaa, d1 move.b d1, d4 asr.l #11, d1 rol.l d4, d1 move.l d1, d4 asr.l #21, d4 eor.l d4, d1 move.l d0, d2 eor.l #$55555555, d2 move.b d2, d4 asl.l #6, d2 ror.l d4, d2 move.l d2, d4 asr.l #22, d4 eor.l d4, d2 move.l d1, d3 asr.l #16, d3 move.l d2, d4 asl.l #16, d4 or.l d4, d3 movel. d0, __seed0 movel. d1, __seed1 movel. d2, __seed2 movel. d3, __seed3 rts rnd2 move.l __seed0, d0 move.l __seed1, d1 move.l __seed2, d2 move.l __seed3, d3 rol.l #5, d1 ror.l #9, d2 rol.l #11, d0 eor.l d1, d0 move.l d1, d4 rol.l #8, d4 asl.l #11, d4 eor.l d4, d0 move.l d2, d4 ror.l #8, d4 andi.l #63, d4 eor.l d4, d0 move.l d3, d4 rol.l #8, d4 asr.l #5, d4 eor.l d4, d0 ror.l #14, d0 eor.l d3, d0 eor.l d3, d1 eor.l d3, d2 ror.l d0, d3 movel. d0, __seed0 movel. d1, __seed1 movel. d2, __seed2 movel. d3, __seed3 rts __seed0 dc.l 0 __seed1 dc.l 0 __seed2 dc.l 0 __seed3 dc.l 0Használjátok egész seggel. ;) |
kemi (statz) | #2, Főfasz (2970) |
765 | #177a | ^ | Idézet | Tue, 01 Nov 2011 10:05:19 +01 |
84.236.*.* | *.pool.digikabel.hu |
Ismerkedem a C++-szal, és kezdem megszeretni, (hozzám valahogy a C származékok (persze a cisztát kivéve) közelebb állnak, mint a Pascal.) találtam is hozzá egy elég nagy tudású cross platform IDE-t. A problémám az, hogy iszonyatosan nagy binárisokat generál. Egy program, ami nem csinál semmit, csak megnyit egy GUI ablakot, linux alatt 700k, winfos alatt 16 mega! Ez még akkor is sok, ha benne vannak a debug infók. A gcc-nek hogy lehet megmondani, hogy szedje ki a binárisból a debug infókat? Amúgy kár, hogy a niken csak azt a fos C#-ot oktatják. C++-szal sokkal többre lehet vinni, de hát a nik élén M$ csicskák ülnek, nekik meg az az érdekük minél több mikrofos programozót képezzenek ki. Nem véletlenül van a nik honlapjának az alján az M$ logó. |
TCH (statz) | #1, Főfasz (10443) |
872 | #177b | ^ | Idézet | Tue, 01 Nov 2011 11:30:04 +01 |
46.107.*.* | *.catv.pool.telekom.hu |
A Lazarus pont fordítva csinálja, Linux alá generál überméretű programokat. Tudttommal a gcc default nem tesz debug infókat a programba, külön kapcsolóval kell neki megmondani. Nem véletlen, hogy én otthagytam. Na jó, az is közrejátszott, hogy matekból egy rakatszor meghúztak. :) |
djpety alias "Pety" | #6, Lófasz (953) |
192 | #177c | ^ | Idézet | Tue, 01 Nov 2011 11:31:26 +01 |
81.182.*.* | *.pool.t-online.hu |
kemi: strip paranccsal lehet utólag gcc-vel fordítottakon. Fordításkor nem tudom. De az is lehetetlen, hogy windows alatt 16 mega, kizártnak tartom. Valami nagyon sok cuccot rakhat akkor bele. |
TCH (statz) | #1, Főfasz (10443) |
481 | #177d | ^ | Idézet | Tue, 01 Nov 2011 14:19:16 +01 |
46.107.*.* | *.catv.pool.telekom.hu |
Igen, Linuxon szokott akkora lenni, Lazarussal. Egyszer már mondtam is keminek, hogy úgy lehet eldobatni, hogy strip. (?m=0&o=4211&c=1) De a gcc meg tudtommal nem rak bele semmit alapból. Szerintem az a kurwa okos IDE az ami úgy paraméterezi fel a gcc-t, hogy minden szemetet belefordít. Az ordenáré fájlméret meg doszta a Linuxra jellemző, mert ott fordít bele mindent a compiler, hogy mindenütt fu(that)sson, a windózok közel egyformák, kompatibilisek (excluse vista). |
kemi (statz) | #2, Főfasz (2970) |
189 | #177e | ^ | Idézet | Tue, 01 Nov 2011 15:45:04 +01 |
84.236.*.* | *.pool.digikabel.hu |
Rájöttem, azért lett olyan nagy az exe, mert belefordítja a Qt toolkitet. A compiler beállításaiból kiszedtem, csak így meg winfos alatt is meg kell követelni a júzertől, hogy legyen Qt. :P |
TCH (statz) | #1, Főfasz (10443) |
87 | #177f | ^ | Idézet | Tue, 01 Nov 2011 18:11:48 +01 |
46.107.*.* | *.catv.pool.telekom.hu |
Mimimi? Miért kell neki Qt? Van a winfosnak saját widgetsetje. Nem tudja azt használni? |