Co f
oznaczają liczby po liczbach? Czy to z C czy Objective-C? Czy jest jakaś różnica w nie dodawaniu tego do stałej liczby?
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
Czy możesz wyjaśnić, dlaczego nie napisałbym po prostu:
CGRect frame = CGRectMake(0, 0, 320, 50);
objective-c
c
floating-point
typoneerror
źródło
źródło
W razie wątpliwości sprawdź wyjście asemblera. Na przykład napisz mały, minimalny fragment, np. W ten sposób
Następnie skompiluj go do asemblera z
-S
opcją.Zapisz wyjście assemblera w
test.s
pliku i usuń.0f
ze stałych i powtórz polecenie kompilacji. Następnie zróbdiff
nowytest.s
i poprzedni. Pomyśl, że powinno to pokazać, czy są jakieś rzeczywiste różnice. Myślę, że zbyt wielu ma wizję tego, co według nich robi kompilator, ale na koniec dnia należy wiedzieć, jak zweryfikować wszelkie teorie.źródło
-O
. Jestem na i686-apple-darwin10-gcc-4.2.1 (GCC)Czasami jest różnica.
źródło
Mówi komputerowi, że jest to liczba zmiennoprzecinkowa (zakładam, że mówisz tutaj o c / c ++). Jeśli po liczbie nie ma f, jest ona uważana za podwójną lub całkowitą (w zależności od tego, czy występuje ułamek dziesiętny, czy nie).
źródło
Literał zmiennoprzecinkowy w kodzie źródłowym jest analizowany jako double. Przypisanie go do zmiennej typu float spowoduje utratę precyzji. Duża precyzja, odrzucasz 7 cyfr znaczących. Postfiks "f" pozwala ci powiedzieć kompilatorowi: "Wiem, co robię, to jest zamierzone. Nie męcz mnie tym".
Przy okazji, szanse na wywołanie błędu nie są tak małe. Wiele programów upierało się przy nieprzemyślanym porównaniu zmiennoprzecinkowym lub zakładając, że 0.1 jest dokładnie reprezentowalna.
źródło
To
f
, o czym mówisz, prawdopodobnie ma na celu poinformowanie kompilatora, że działa z wartością zmiennoprzecinkową. Kiedy pominieszf
, jest zwykle tłumaczone na podwójne.Obie są liczbami zmiennoprzecinkowymi, ale a
float
używa mniej bitów (a więc mniejszych i mniej dokładnych) niż adouble
.źródło
To kwestia C - literały zmiennoprzecinkowe są domyślnie podwójnej precyzji (double). Dodanie sufiksu f powoduje, że są one z pojedynczą precyzją (zmiennoprzecinkowe).
Możesz użyć ints do określenia wartości tutaj iw tym przypadku nie będzie to miało znaczenia, ale używanie właściwego typu jest dobrym nawykiem - spójność jest ogólnie dobra, a jeśli będziesz musiał zmienić te wartości później, Dowie się na pierwszy rzut oka, jaki to typ.
źródło
Od C. Oznacza dosłowną stałą float. Możesz pominąć zarówno „f”, jak i „.0” i użyć liczb całkowitych w swoim przykładzie z powodu niejawnej konwersji liczb całkowitych na zmiennoprzecinkowe.
źródło
Prawie na pewno pochodzi z C i odzwierciedla chęć użycia raczej typu „float” niż „double”. Jest podobny do przyrostków, takich jak L na liczbach, aby wskazać, że są to długie liczby całkowite. Możesz po prostu użyć liczb całkowitych, a kompilator przeprowadzi automatyczną konwersję w razie potrzeby (dla tego konkretnego scenariusza).
źródło
Zwykle mówi kompilatorowi, że wartością jest a
float
, tj. Liczba zmiennoprzecinkowa. Oznacza to, że może przechowywać liczby całkowite, wartości dziesiętnych i wykładniki, np1
,0.4
albo1.2e+22
.źródło