Was bedeutet das f
nach den Zahlen? Ist das von C oder Objective-C? Gibt es einen Unterschied, wenn dies nicht zu einer konstanten Zahl hinzugefügt wird?
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
Können Sie erklären, warum ich nicht einfach schreiben würde:
CGRect frame = CGRectMake(0, 0, 320, 50);
objective-c
c
floating-point
typoneerror
quelle
quelle
Überprüfen Sie im Zweifelsfall die Assembler-Ausgabe. Schreiben Sie zum Beispiel ein kleines, minimales Snippet wie dieses
Kompilieren Sie es dann mit der
-S
Option zum Assembler .Speichern Sie die Assembler-Ausgabe in der
test.s
Datei, entfernen Sie sie.0f
aus den Konstanten und wiederholen Sie den Kompilierungsbefehl. Dann machen Sie einediff
der neuentest.s
und vorherigen. Denken Sie, das sollte zeigen, ob es echte Unterschiede gibt. Ich denke, zu viele haben eine Vorstellung davon, was der Compiler ihrer Meinung nach tut, aber am Ende des Tages sollte man wissen, wie man Theorien überprüft.quelle
-O
. Ich bin auf i686-apple-darwin10-gcc-4.2.1 (GCC)Manchmal gibt es einen Unterschied.
quelle
Es teilt dem Computer mit, dass dies eine Gleitkommazahl ist (ich nehme an, Sie sprechen hier von c / c ++). Wenn nach der Zahl kein f steht, wird es als Doppel oder Ganzzahl betrachtet (je nachdem, ob es eine Dezimalstelle gibt oder nicht).
quelle
Ein Gleitkomma-Literal in Ihrem Quellcode wird als Double analysiert. Das Zuweisen zu einer Variablen vom Typ float verliert an Genauigkeit. Mit viel Präzision werfen Sie 7 signifikante Ziffern weg. Mit dem Postfix "f" können Sie dem Compiler sagen: "Ich weiß, was ich tue, das ist beabsichtigt. Ärgern Sie mich nicht darüber."
Die Wahrscheinlichkeit, einen Fehler zu produzieren, ist übrigens nicht so gering. Viele Programme sind auf einen schlecht durchdachten Gleitkomma-Vergleich oder die Annahme gestoßen, dass 0,1 genau darstellbar ist.
quelle
Das
f
, von dem Sie sprechen, soll dem Compiler wahrscheinlich mitteilen, dass es mit einem Float arbeitet. Wenn Sie das weglassenf
, wird es normalerweise in ein Doppel übersetzt.Beide sind Gleitkommazahlen, aber a
float
verwendet weniger Bits (also kleiner und weniger genau) als adouble
.quelle
Es ist eine C-Sache - Gleitkomma-Literale haben standardmäßig die doppelte Genauigkeit (doppelt). Durch Hinzufügen eines f-Suffixes erhalten sie eine einfache Genauigkeit (float).
Sie können Ints verwenden, um die Werte hier anzugeben, und in diesem Fall macht es keinen Unterschied, aber die Verwendung des richtigen Typs ist eine gute Angewohnheit - Konsistenz ist im Allgemeinen eine gute Sache, und wenn Sie diese Werte später ändern müssen, können Sie dies tun Ich werde auf den ersten Blick wissen, um welchen Typ es sich handelt.
quelle
Von C. Es bedeutet Float-Literal-Konstante. Sie können sowohl "f" als auch ".0" weglassen und in Ihrem Beispiel Ints verwenden, da Ints implizit in Floats konvertiert werden.
quelle
Es ist mit ziemlicher Sicherheit von C und spiegelt den Wunsch wider, einen "Float" anstelle eines "Double" -Typs zu verwenden. Es ähnelt Suffixen wie L auf Zahlen, um anzuzeigen, dass es sich um lange Ganzzahlen handelt. Sie können nur Ganzzahlen verwenden, und der Compiler konvertiert entsprechend automatisch (für dieses spezielle Szenario).
quelle
Normalerweise teilt es dem Compiler mit, dass der Wert a ist
float
, dh eine Gleitkomma-Ganzzahl. Dies bedeutet , dass sie speichern können ganze Zahlen, Dezimalzahlen und Exponenten, zum Beispiel1
,0.4
oder1.2e+22
.quelle