2013-03-14 24 views
5

Czy powinienem pisać wartości CGFloat z postfiksem f, czy nie?Czy istnieje różnica wydajności przy użyciu CGFloat z lub bez postfiksa .f w Objective-C

CGFloat fValue = 1.2; 

vs.

CGFloat fValue = 1.2f; 

wiem, że to postfix określić wartość typu float. Ale czy jest to konieczne, czy ma to sens, czy są jakieś różnice w wydajności między tymi dwoma lub czy jest to tylko prezentacja wizualna, więc możesz szybko zdefiniować typ wartości (na przykład w tym przypadku zmiennoprzecinkowy)?

+1

http://stackoverflow.com/questions/2391818/f-after-number-float-in-objective-cc – iphonic

+1

http://stackoverflow.com/questions/14302898/is-it-better-to-write -0-0-0-0f-or-0f-zamiast-of-simple-0-for-supposed-float-or/14302912 # 14302912 –

Odpowiedz

6

1.2 oznacza double; tj. 64-bitowa liczba zmiennoprzecinkowa o podwójnej precyzji.

1.2f jest float; tj. 32-bitowa liczba zmiennoprzecinkowa o pojedynczej precyzji.

Pod względem wydajności, nie ma znaczenia, jak kompilator przeliczy literały z float do double i double do float jak to konieczne. Jednak przy przypisywaniu liczb zmiennoprzecinkowych z funkcji najprawdopodobniej trzeba będzie rzutować, aby uniknąć ostrzeżenia kompilatora.

+0

Nie ma to również znaczenia, ponieważ wątpię, by powodował on jakąkolwiek mierzalną wydajność jeśli nie był konwertowany przez kompilator. Sądząc po sformułowaniu, krzyczy przedwczesna optymalizacja. – borrrden

+0

Dlatego powinien używać przyrostka, jeśli używam wartości zmiennoprzecinkowych i pomijam go, jeśli używam podwójnego. Po tym, jak wszystkie kompilatory mają jakąś dodatkową pracę do wykonania, jeśli pomijam postfix dla wartości zmiennoprzecinkowych. Ale w dzisiejszych czasach nie powinno to wpływać na wydajność. –

+1

@ BorutTomazin Nie martwiłbym się wcale; Widziałem wiele przykładów, gdzie podane są liczby całkowite i to również działa dobrze. Biorąc pod uwagę ilość pracy wykonywanej przez kompilator w celu wygenerowania pliku obiektu, jest to * kropla w oceanie *. – trojanfoe

0

Podstawową różnicą jest:

1,0 lub 1 jest podwójny stały

1.0f jest pływak stałe

bez przyrostka dosłownym z ułamek dziesiętny w nim (123,0) będą traktowane jako liczba zmiennoprzecinkowa podwójnej precyzji.

Po przypisaniu lub przekazaniu tego do zmiennej lub parametru o pojedynczej precyzji kompilator powinien (powinien) wydać ostrzeżenie. Dodanie f mówi kompilatorowi, że literał ma być traktowany jako liczba zmiennoprzecinkowa o pojedynczej precyzji.