darksign Posted February 12, 2009 Report Share Posted February 12, 2009 Ghenis .. un ko tieši tev iedeva? :)) p.s. vēl viens labs fitrs meklējot tieši koderi ir pajautāt viņam kādā veidā (uz papīra/tāfeles) viņš apmainīs divus mainīgos... šeit tikai jāizdomā ko grib redzēt, vai lai viņš uzstāda trešo mainīgo, vai arī neizmantojot trešo mainīgo... :) un vispār.. ko domājat.. kas ir labāks $a = 3; $b = 2; $a = $a * $b; //{6} $b = $a / $b; //{3} $a = $a / $b; //{2} vai $a = 3; $b = 2; $c = $b; //{2} $b = $a; //{3} $a = $b; //{2} Ikdienā ticu ka gandrīz visi izmantos otro variantu.. taču varbūt ir kāds matemātiski pamatots iemesls kāpēc izvēlēties vienu vai otru? piemēram.. cik atmiņu noēd pirmais un cik otrais.. kurš izpildās ātrāk (nevis vnk pēc operāciju skaita, bet pēc ātruma utt...)... interesanti.. :D Link to comment Share on other sites More sharing options...
Grey_Wolf Posted February 12, 2009 Report Share Posted February 12, 2009 un vispār.. ko domājat.. kas ir labāks Vienoziimigi otrais variants, pamatojums ir vienkarsh un logjisks ... 1. Saprotamaks kods 2. Vienoziimigi atraks un ekanomiskaaks... // 2trajaa variantaa tikai 1 pieskirsanas operacija , 1ja pieskirsana + Reizinasana , kas Reali ir saskaitiisanu virkne 3. mazaka iespejamaa kljuuda , 4. 1ais variants stradaas TIKAI uz skaitliskiem mainiigajiem ;) // nu ja nezdomas hitraa veidaa mainiit pa baitiem ;) P.S. taatad Reali paliek Tikai 2 varints ... Link to comment Share on other sites More sharing options...
zinatnieks Posted February 12, 2009 Report Share Posted February 12, 2009 Nedomāju, ka kāds tev liktu to darīt uzņemot laiku uz hronometra... Link to comment Share on other sites More sharing options...
bubu Posted February 12, 2009 Report Share Posted February 12, 2009 Es teiktu, ka pirmo variantu izvēlētos tikai dikti slimi programmētāji. Tas pie tam ir līks un neprecīzs. Pamēģini vien apmainīt divus floatus, kuru vērtības ir 1e150 un 1e200. Vai tikpat labi divus integer'us, kuri ir 0 un 100. Tas, kas izvēlētos otro variantu, izdarītu tikai pareizu un ļoti labu variantu - gan no performances, gan koda kārtības viedokļa. Es gan šādā situācijā izmantotu: list($a, $b) = array($b, $a); Tas no man pitona iegājies, kur var rakstīt: a, b = b, a tur komats veido tupli (masīva paveids). Link to comment Share on other sites More sharing options...
Aleksejs Posted February 12, 2009 Report Share Posted February 12, 2009 Php gadījumā noteikti izvēlētos otro - puķu podu variantu (atslēgas vārds Pēcis Beisikānis). Taču pie zināmiem apstākļiem (piemēram vismaz kādreiz assemblerā) ātrāks ir pirmais variants - tikai nevis reizināšana, dalīšana, bet gan dalīšana pēc moduļa 2, jeb XOR Ja a un b vērtības glabājas reģistros AX un BX, tad tās samaina vietām: XOR AX,BX XOR BX,AX XOR AX,BX pamatojums: XOR darbojās (vismaz kādreiz) ātrāk par MOV, nemaz nerunājot par lasīšanu/rakstīšanu RAMā. Link to comment Share on other sites More sharing options...
bubu Posted February 12, 2009 Report Share Posted February 12, 2009 Aleksej, kādus tu jokus te raksti? x86 assemblerā ir visai smuka XCHG instrukcija: XCHG AX, BX Link to comment Share on other sites More sharing options...
Grey_Wolf Posted February 13, 2009 Report Share Posted February 13, 2009 Taču pie zināmiem apstākļiem (piemēram vismaz kādreiz assemblerā Tas ir tas ko teicu Ja vien Neizdomas visu mainiit pa Baitiem ... Un ko dariisi ja maniiga vertiba satur masiivus ??? Arii izmantosi dalisano peec modulja ?? + kaa ja bubu mineja un kapeec gan ne XCHG ?? Link to comment Share on other sites More sharing options...
darksign Posted February 13, 2009 Author Report Share Posted February 13, 2009 kapēc ne XCHG.. tapēc ka vnk nezin jaunieviestās instrukcijas.. ikdienā nelieto assembleru un līdz ar to neseko līdz visam tam.. droši vien tapēc :D nemaz nezināju ka tāds XCHG ir.. tnx par infu :) bubu variants ar masīviem .. forši :) nebiju redzējis ka kāds pielietotu dzīvē šo variantu :) (laikam bubu mums viens no tiem kūl dzekiem kas think out of box :)) ) vai arī tas nācis tikai pēc pyton :) Link to comment Share on other sites More sharing options...
marrtins Posted February 13, 2009 Report Share Posted February 13, 2009 (edited) Vot vot, kad sen atpakaļ ņēmos ar asm, tad part tādu XCHG nezināju vai tāds nemaz nebija (jāpapēta sīkāk). Ar XOR`iem varēj itin žiperīgi apmainīties vērtībām :) Update: biki google, un "Available only on 80386 and later processors". Ar asm kruķījos uz 80286 :D Update2: savukārt wikipedia saka, ka "The Intel 8086, released in 1978, also included an instruction named XCHG." Ej nu taga sazini... Edited February 13, 2009 by marrtins Link to comment Share on other sites More sharing options...
Aleksejs Posted February 13, 2009 Report Share Posted February 13, 2009 Vēlreiz akcentēju pie zināmiem apstākļiem (~; Vienkārši likās interesanti padalīties, ka ir arī šāds variants. Bez tam fakts, ka XCG ir viena asm komanda vēl neko neizsaka par to, cik taktīs tas viss izpildīsies - viss atkarīgs no procesora. (~; Link to comment Share on other sites More sharing options...
darksign Posted February 13, 2009 Author Report Share Posted February 13, 2009 nja.. jo zemaakas komandas izmanto... jo lielaaka kontrole paar to ko tu dari :)) bet kas zin.. varbuut intel/amd ... whatever ... ir izveidojushi taas lietas tik taal ieksh hardwares ka tomeer ir viena vieniiga darbiiba ar to XCHG Link to comment Share on other sites More sharing options...
cucumber Posted February 13, 2009 Report Share Posted February 13, 2009 (edited) 3. variants bez tresha mainiga, stradas labi, kamer nebus izgajis pari mainiga robezai (lielumam) $a = 3; $b = 2; $a = $a+$b; //5 $b = $a-$b; //3 $a = $a-$b; //5-3 Edited February 13, 2009 by cucumber Link to comment Share on other sites More sharing options...
Grey_Wolf Posted February 13, 2009 Report Share Posted February 13, 2009 cucumber --> Un kaa apmainiisi vietam STRING vai Masiivu, vai Objektu ??? Link to comment Share on other sites More sharing options...
cucumber Posted February 13, 2009 Report Share Posted February 13, 2009 (edited) Grey_Wolf ---> ar citam metodem (: nebija isti teikts par ko iet runa, mans variants ir skaitliem, es domaju some kind of stiligi ta darit Edited February 13, 2009 by cucumber Link to comment Share on other sites More sharing options...
bubu Posted February 13, 2009 Report Share Posted February 13, 2009 Update2: savukārt wikipedia saka, ka "The Intel 8086, released in 1978, also included an instruction named XCHG." Ej nu taga sazini... Tieši tā - XCHG ir jau kopš 8086 procesora. Nekas jauns tas nav. XOR triku, ja tiešam jāmaina tikai veseli skaitļi, var arī pielietot augsta līmeņa valodās, bet nu es tam personīgi neredzu jēgu: $a ^= $b ^= $a ^= $b; Link to comment Share on other sites More sharing options...
Recommended Posts