Float czy Double?


(Kamil Kubik) #1

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... :expressionless: Ja chcailbym poznac prawdziwa opinie tych, ktorzy szanuja wolna pamiec Ram i odpowiednio klasyfuikuja obrabiane dane. Z gory dzieki za sugestie i pomoc...


(Sawyer47) #2

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─ç.


(Johny) #3

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.


(somekind) #4

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.


(Starkowski Dawid) #5

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.


(pebal) #6

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.


(Starkowski Dawid) #7

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.


(Kamil Kubik) #8

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);

([alex]) #9

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.