Czy jest inny sposób niż operator %? Jak wiadomo, to jest wolne, a potrzebuje "wyciągnąć" z liczby kazdą jej cyfre.
unsigned value=?;
for(unsigned i=0;(value)||(!i);++i)
{
unsigned next=value/10;
buf[i]=value-10*next;
value=next;
}
Nie ma % ale dzielenie zostało.
Jeżeli "cyfry" są dziesiętne to nie ma innego sposobu. Lecz jeżeli cyfry są w systemie który jest potęgą dwójki: 2,4,8,16 to da się obejść samymi operacjami bitowymi, dodawanie, odejmowanie.
Tak przy okazji - nie chce zakładac nowego tematu dla jakiejs glupoty. jak zapisać to w jednej linijce?
char *wsk;
wsk = (char *) wynik;
char *wsk=wynik; //powinno wystarczyć
błąd:cannot convert 'bool*' to 'char*' in initialization
char *wsk = wynik;
^
No tak, zapomnialem dodać, ze wynik to bool i stąd to rzutowanie.
EDIT: już wiem ;)
Jak widzę z innych tematów nie zrozumiałeś na czym polega przyspieszenie.
Same operacje % i / to jest dokładnie ta sama operacja i jest długa.
Przeważnie przy przekształceniu na inny system lub przy "ręcznym" mnożeniu robimy obie operacje pod rząd:
Cyfra[i]=wynik%MOD;
wynik/=MOD;
To co pokazałem w tym temacie pozwala na wyeliminowanie jednej z tych operacji:
next=wynik/MOD;
Cyfra[i]=wynik-next*MOD;
wynik=next;
Natomiast to co zacząłeś używać:
Cyfra[i]=wynik-MOD*(wynik/MOD);
wynik/=MOD;
jest z cała pewnością dłuższe od pierwotnego kodu
Czy jest inny sposób niż operator %? Jak wiadomo, to jest wolne, a potrzebuje "wyciągnąć" z liczby kazdą jej cyfre.
Robisz miliard takich operacji na sekundę, że ci jest za wolne?
A może by ją na string-a przerobić?
zonkoo22 napisał(a)
Azarien napisał(a)
Robisz miliard takich operacji na sekundę, że ci jest za wolne?
Dokładnie tak.
No to albo asembler albo przemyśl cały algorytm. Albo szybszy komputer.
Azarien napisał(a):
zonkoo22 napisał(a)
Azarien napisał(a)
Robisz miliard takich operacji na sekundę, że ci jest za wolne?
Dokładnie tak.
No to albo asembler albo przemyśl cały algorytm. Albo szybszy komputer.
Albo wielowątkowość - na pewno wyjdzie taniej, niż szybszy procesor/pamięć.