Zaczynajac programowanie w C jak kazdy maloat zadaje sobie pytanie: Czy uzywac float czy int, a moze od razy double? Wiem ,bo ogarnalem troche teorii, ze dla calkowitych malych int moze byc, dla ulamkow float itp. Na roznych serwisach ludzie wypisuja jednak roznie - jedni wala od razu double inni tylko float. A ja jak glupi z ulamkiem w reku… Ja chcailbym poznac prawdziwa opinie tych, ktorzy szanuja wolna pamiec Ram i odpowiednio klasyfuikuja obrabiane dane. Z gory dzieki za sugestie i pomoc…
Odpowiedź jest bardzo prosta: to zależy. Typu używa się zależnie od potrzeb. Jeśli nie potrzebujesz wyższej precyzji obliczeń używasz float, jeśli potrzebujesz wyższej precyzji używasz double albo innych typów/bibliotek. Dla przykładu do reprezentacji wagi człowieka raczej wystarczy typ float. Jednak nie da się podać jakichś odgórnych wytycznych, stąd Twoje pytanie wydaje mi się dizwne. Od tego jest programista, żeby myśleć.
Zależy czego potrzebujesz,do pętli potrzeba zwykle int.
Do dokładniejszych obliczeń już int nie wystarczy np. zamiana stopni na radiany (x*Pi)/180.,float
A tam,gdzie jest liczenie pieniędzy wskazany jest nawet typ double.
Tam, gdzie występuje liczenie pieniędzy typ double jest bezwzględnie niewskazany jako zbyt mało precyzyjny (bo zmiennoprzecinkowy). Do obliczeń finansowych używa się typów stałoprzecinkowych.
Ja zazwyczaj do obliczeń używam double, zaś float tylko gdy potrzebuję zaoszczędzić pamięć (np. dla tablicy z milionem wartości to jest już różnica).
Ponoć procesory i tak są zoptymalizowane do obliczeń na double.
A int nie ma jak porównywać z float i double, bo to liczba całkowita a nie rzeczywista.
Double nie tylko ma większą precyzję, ale jest też wspomagany sprzętowo przez procesor, więc daje większą wydajność. Typu float użyłbym tylko do zastosowania gdzie NAPRAWDĘ ważna jest oszczędność pamięci, czyli w dzisiejszych komputerach prawie nigdy.
A cóż to za dziwna teoria? Typ float jest natywnie wspierany przez koprocesory. Mało tego, tam gdzie priorytetem jest największa wydajność, używa się instrukcji SSE procesora, operujących właśnie na zmiennych typu float.
Z tego co kojarzę to z MSDN ta teoria pochodzi.
Możliwe, że dotyczy to tylko .Net Framework (albo żę coś mi się pomieszało). Poszukam, może mi się uda to znaleźć.
Edit:
Wydawało mi się że to dotyczyło C++, ale poszperałem trochę i faktycznie mogło chodzić tylko o .Net:
Co do natywnego kodu, różne opinie znalazłem. Dla mnie to za niski poziom, więc się nie kłócę. Dzięki za zwrócenie na to uwagi.
Dzieki za moc wyczerpujacych wyjasnien - troche sibie to w glowie poukladalem… Czas do praktyki a tu… muuukkkaaaa :o -prof dal nam proste zadanie, ktorego rozwazanie jest banalne, nalezy jednak dobrac odpowiednie typy zmiennych.Wszysako Double?tkiemu winne sa zmienne x = 10864 i y. Po wykonaniu zadanych funkcji mnozenia itp.,nabieraja astronomicznych wartosci. Czy zatem od razy takie liczby traktowac j
#include
#include
int main ()
{
[u]??[/u] x = 10864, y = 18817, nb1, nb2, nb3, z;
nb1 = 9 * pow(x,4);
nb2 = pow(y,4);
nb3 = 2 * pow(y,2);
z = nb1 + nb2 + nb3;
printf("Le resultat: nb1 %?? + nb2 %?? + nb3 %?? = %?? \n", nb1, nb2, nb3, z);
x,y mogą być spokojnie nawet typu short int.
Natomiast pozostałe mogą być long long int lub double.
long long int nie każdy kompilator łyka bo nie ma jeszcze na to standardu, w niektórych kompilatorach wabi się int64 lub int_64.