konto usunięte

Temat: rząd liczby [C]

@Jakub,
Ale nie przesadzajmy z modelowaniem obiektowym w takich zastosowaniach.

Chodziło mi o zasadę a nie o konkretny przypadek. Może uwaga Piotra odnosiła się akurat do tego (przypadku) ...

Chyba trzeba kończyć wątek. Zrobiło się strasznie nerdowsko i pewnie zaraz ktoś zacznie opowiadać dowcipy:
Ilu programistów potrzeba do napisania funkcji "Rzad" ? :)Jakub Wojt edytował(a) ten post dnia 20.11.11 o godzinie 18:33
Marcin Barańczak

Marcin Barańczak Programista - tester
automatyzujący

Temat: rząd liczby [C]

Nie wiem czy czegoś nie mylę, ale czy nie prościej byłoby skonwertować liczbę na stringa i zwrócić jego długość?

konto usunięte

Temat: rząd liczby [C]

Marcin Barańczak:
Nie wiem czy czegoś nie mylę, ale czy nie prościej byłoby skonwertować liczbę na stringa i zwrócić jego długość?

Nie, bo żeby skonwertować (a więc uzyskać kolejne cyfry) musisz dzielić przez 10, a w rozwiązaniu zaproponowanym wcześniej występuje mnożenie przez 10, które jest szybsze od dzielenia.
Marcin Barańczak

Marcin Barańczak Programista - tester
automatyzujący

Temat: rząd liczby [C]

konkretnie chodziło mi o funkcję "itoa" ( http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/ ). Przyznając się bez bicia nigdy nie zagłębiałem się w sposób jej działania.

konto usunięte

Temat: rząd liczby [C]

Marcin Barańczak:
konkretnie chodziło mi o funkcję "itoa"

Niestety. Dzielenie jak byk:

http://www.koders.com/c/fid5F9B1CF12E947E5030A132D309A...
Marcin Barańczak

Marcin Barańczak Programista - tester
automatyzujący

Temat: rząd liczby [C]

Co prawda nie pomogłem, ale przynajmniej sam skorzystałem troszkę. Na drugi raz będę mądrzejszy :)

konto usunięte

Temat: rząd liczby [C]

Witam!

Wersja z logarytmem wydaje się najlepsza, co do "if" od dawien dawna tłucze się wszystkim że "If" jest "wolną" instrukcją , już lepszy "case".

ale chciałem zaproponować inne rozwiązanie trochę nieortodoksyjne nie będę klepał kodu ale pomysł jest taki:

-utworzyć buforowany łańcuch znakowy z liczby (żeby nie ograniczać liczby.
polecenie StringBuffer w Javie
-a potem sczytać długość łańcucha

mało matematyczne a powinno dać efekty podobne do log-a.

konto usunięte

Temat: rząd liczby [C]

Maciej Ściesiński:
chciałem zaproponować inne rozwiązanie
Czytałeś cały wątek?
L P

L P podskala.net

Temat: rząd liczby [C]

Find integer log base 10 of an integer the obvious way

unsigned int v; // non-zero 32-bit integer value to compute the log base 10 of
int r; // result goes here

r = (v >= 1000000000) ? 9 : (v >= 100000000) ? 8 : (v >= 10000000) ? 7 :
(v >= 1000000) ? 6 : (v >= 100000) ? 5 : (v >= 10000) ? 4 :
(v >= 1000) ? 3 : (v >= 100) ? 2 : (v >= 10) ? 1 : 0;

This method works well when the input is uniformly distributed over 32-bit values because 76% of the inputs are caught by the first compare, 21% are caught by the second compare, 2% are caught by the third, and so on (chopping the remaining down by 90% with each comparision). As a result, less than 2.6 operations are needed on average.

On April 18, 2007, Emanuel Hoogeveen suggested a variation on this where the conditions used divisions, which were not as fast as simple comparisons.



Wyślij zaproszenie do