niedziela, maja 30, 2010

Jak szybciej znaleźć mniejszą i większą wartość? [opisowy tytuł, który niewiele mówi ;-)]

Optymalizacja to zło, ale jakbyście czasem musieli ;-) to dziś porada dotycząca szukania mniejszej i większej liczby. Na wejściu dostajemy 2 liczby typu double, na wyjściu chcemy dostać te same liczby, ale tak by były ustawione wg. wielkości. wejście: a, b wyjście: min(a,b), max(a,b) Pierwsze co przychodzi do głowy to:

 double c = Math.min(a, b); 
double d = Math.max(a, b);
a = c; b = d;
Jednak szybsze jest użycie takiego kodu:

 double c = a+b;
b = (a<b)?b:a;
a = c - b;
Ten drugi kod na wykonanie zużywa tylko 74% czasu potrzebnego na wykonanie pierwszego kodu. Zawsze to coś, jeżeli Twój kod spędza 100 sekund w ustalaniu która liczba z 2 jest większa, a która mniejsza to zawsze te 26 sekund można spożytkować na coś innego ;-) Oczywiście trzeba sprawdzić wszystko w swoich warunkach, mnie to pozwoliło na przyśpieszenie programu o jakieś 4-5% bez wyraźnego spadku jakości obliczeń. [Co nie ma do końca sensu, bo wystarczy małe "zachwianie" procesora, spowodowane włączeniem się innego procesu i cały zysk się w moim przypadku traci, ale to przez to, że najbardziej procesożerna część programu trwa około 22 sekund ;-)]


Podobne postybeta
Plus dla Scala, minus dla Groovy ;-)
Java i liczby pierwsze, odsłona druga
Sztuczka - ile to jeszcze potrwa?
Wiele desktopów i lupa - czemu Windows tego nie ma?
OOo2GD 2.1.1 gotowe :-)