Czy jest inny sposób niż operator %? Jak wiadomo, to jest wolne, a potrzebuje "wyciągnąć" z liczby kazdą jej cyfre.

- Rejestracja:prawie 20 lat
- Ostatnio:9 dni
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.






- Rejestracja:ponad 12 lat
- Ostatnio:około 2 miesiące
- Lokalizacja:Kraków
- Postów:1055
Tak przy okazji - nie chce zakładac nowego tematu dla jakiejs glupoty. jak zapisać to w jednej linijce?
char *wsk;
wsk = (char *) wynik;

- Rejestracja:ponad 12 lat
- Ostatnio:około 2 miesiące
- Lokalizacja:Kraków
- Postów:1055
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 ;)


- Rejestracja:prawie 20 lat
- Ostatnio:9 dni
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



mod()
oraz jej wywołanie. Po czym proszę tu w komentarzach opisać ten problem tak aby nawet tacy czepialscy jak wy zrozumieli o co biega ;P


- Rejestracja:ponad 21 lat
- Ostatnio:około 13 godzin
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?


- Rejestracja:ponad 22 lata
- Ostatnio:około 10 godzin
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ęć.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.