Frage

Gibt es einen Compiler, der über eine Richtlinie oder einen Parameter verfügt, um die Ganzzahlberechnung zu werfen, um implizit zu schweben? Zum Beispiel:

float f = (1/3)*5;
cout << f;

Das "F" ist "0", weil die Konstanten der Berechnung (1, 3, 10) ganzzahlig sind. Ich möchte die Ganzzahlberechnung mit einer Compiler -Anweisung oder einem Parameter konvertieren. Ich meine, ich werde nicht explizites Casting oder ".f" -Prefix so verwenden:

float f = ((float)1/3)*5;

oder

float f = (1.0f/3.0f)*5.0f;

Kennen Sie einen C/C ++ - Compiler, der einen Parameter hat, um diesen Prozess ohne explizites Casting oder ".f" -Ding durchzuführen?

War es hilfreich?

Lösung

Wenn Sie keine der beiden von Ihnen erwähnten Methoden mögen, haben Sie wahrscheinlich kein Glück.

Was hoffen Sie damit zu erreichen? Jeder spezialisierte Operator, der "Float-Division" musste, müsste INTs irgendwann nach der Tokenisierung in Schwimmer konvertieren, was bedeutet, dass Sie bei der Ausführung keinen Leistungsvorteil erzielen.

Andere Tipps

Jeder Compiler, der das getan hat, was Sie wollen, wäre kein konformer C ++ - Compiler mehr. Die Semantik der Ganzzahl -Division ist gut spezifiziert (zumindest für positive Zahlen), und Sie schlagen vor, dies zu ändern.

Es wäre auch gefährlich, da es sich für alles beziehen würde, und Sie könnten irgendwann Code haben, der sich auf die Standardgeist -Arithmetik stützen würde, die stillschweigend ungültig wäre. (Wenn Sie Tests hätten, die dies fangen würden, hätten Sie vermutlich Tests, die die unerwünschte ganzzahlige Arithmetik aufnehmen würden.)

Der einzig const float).

In C ++ ist es ein bisschen seltsam zu sehen, dass eine Reihe numerischer Werte durch den Code streuen. Im Allgemeinen wird es als bewährte Verfahren angesehen, alle "magischen Zahlen" wie diese in ihren eigenen statischen Const Float -Wert zu verschieben, was dieses Problem beseitigt.

Nein, diese beiden Optionen sind die besten, die Sie haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top