Int czy double? Procesor 64bitowy

0

Witam!

Zastanawiam się co jest optymalniej wykorzystać, typ double czy int?

Wiem, że ciężko porównać ale:
W moich algorytmach występuje obróbka danych, spokojnie może być to int, ale nie wszystko da się przewidzieć i nie wiadomo czy będzie potrzebny double/float.

Jeśli procesory teraz przeważnie są 64bitowe to nie powinno mieć znaczenia czy jest to int czy double dla obciążenia procesora, prawda?
Procesory mają wbudowane instrukcje bezpośrednich operacji na liczbach zmiennoprzecinkowych?

Aktualnie wszystko mam na "double" i zaczynam optymalizować algorytmy, zastanawia mnie czy przerobienie na int'y coś przyspieszy obróbkę...

3

Zdecydowanie przyspieszy.

4

@Gacje to że liczba 64 bitowa mieści się w rejestrze procesora wcale nie znaczy że operacja matematyczna na tych bitach zawsze jest równie kosztowna. Operacje na typie double są znacznie bardziej skomplikowane niż operacje na liczbach całkowitych i zajmują dużo więcej czasu.

0

Zależy od sprzętu, ale na większości nowych sprzętów, jeśli kompilator potrafi stworzyć kod dla takiej maszyny, to operacje zmiennoprzecinkowe powinny wykonać się szybciej, ale - należy pamiętać, że operowanie na liczbach zmiennoprzecinkowych wprowadza błąd obliczeń

0

Wydaje mi się, ze jednak operacje całkowite będą dużo szybsze choćby z uwagi na brak konieczności wykorzystania FPU.

4

To zależy.™ Na współczesnych procesorach x86 i ze współczesnym kompilatorem może wcale nie być różnicy. Operacje zmiennoprzecinkowe i całkowitoliczbowe są często tak samo szybkie. To nie jest w ogóle problem, nad którym powinieneś się zastanawiać.

Twój problem to: jakich potrzebujesz liczb. Użyj dokładnie takich, jakich potrzeba, to wynika z charakterystki zadania. Możesz wykorzystać język tak, aby późniejsza zmiana typu nie była jakaś dotkliwa. Ale nie powinno być takiej potrzeby, przecież zadanie raczej dokładnie określa jakich liczb potrzebujesz.

A uniwersalna odpowiedź to: sprofiluj i zobacz.

0
Gacje napisał(a):

Witam!

Zastanawiam się co jest optymalniej wykorzystać, typ double czy int?

Wiem, że ciężko porównać ale:
W moich algorytmach występuje obróbka danych, spokojnie może być to int, ale nie wszystko da się przewidzieć i nie wiadomo czy będzie potrzebny double/float.

Jeśli procesory teraz przeważnie są 64bitowe to nie powinno mieć znaczenia czy jest to int czy double dla obciążenia procesora, prawda?
Procesory mają wbudowane instrukcje bezpośrednich operacji na liczbach zmiennoprzecinkowych?

Aktualnie wszystko mam na "double" i zaczynam optymalizować algorytmy, zastanawia mnie czy przerobienie na int'y coś przyspieszy obróbkę...

Double są szybsze, ale niedokładne... co już tam ktoś powiedział.
Dlatego też w 'finansach' używane są int a nie floaty.

0

spokojnie może być to int, ale nie wszystko da się przewidzieć i nie wiadomo czy będzie potrzebny double/float

To przewidź. Jeśli nie wiesz czy potrzebny będzie float to wróć do fazy formułowania założeń projektowych, bo na kod za wcześnie..

Dlatego też w 'finansach' używane są int a nie floaty.
Bo finanse to fixed-point, co bez problemu można przedstawiać na intach - po prostu licząc w groszach.

0
Azarien napisał(a):

spokojnie może być to int, ale nie wszystko da się przewidzieć i nie wiadomo czy będzie potrzebny double/float

To przewidź. Jeśli nie wiesz czy potrzebny będzie float to wróć do fazy formułowania założeń projektowych, bo na kod za wcześnie..

Dlatego też w 'finansach' używane są int a nie floaty.
Bo finanse to fixed-point, co bez problemu można przedstawiać na intach - po prostu licząc w groszach.

Nie. W groszach nie da rady, z uwagi na te różne podatki, odsetki, które produkują... 4 cyfry podczas mnożenia.

198.98 * 0.23 = 45.7654

0

A jak będziesz do fiskusa wysyłać te 45.7654? Następnym razem zanim rzucisz się odpowiadać to przynajmniej tyle wiedzy co w Wikipedii na dyskutowany temat łyknij. - _13th_Dragon

Sobie wyślij... do US obecnie na całych złotych obliczasz.

Ale obliczenia i tak są robione na 4 cyfrach, no bo suma 500 takich 0.0001 daje już całe 1 = round(0.5),
więc tak oni to robią... typ currency tak ma.

Ja osobiście liczę to na double, a jedynie koryguję zaokrąglenia od 0.5 w górę, bo tam inaczej to jest robione (poprawnie).

1 użytkowników online, w tym zalogowanych: 0, gości: 1