it-swarm.com.de

Warum sollten Sie Float Double oder Long Double verwenden?

Ich bin noch ein Anfänger im Programmieren und habe immer mehr Fragen, als unsere Buch- oder Internetsuchen beantworten können (es sei denn, ich habe etwas verpasst). Deshalb entschuldige ich mich im Voraus, wenn dies beantwortet wurde, aber ich es nicht finden konnte.

Ich verstehe, dass Float eine geringere Reichweite hat als double, was ihn weniger präzise macht, und aus meiner Sicht ist long double noch genauer (?). Meine Frage ist also, warum Sie eine Variable verwenden wollen, die überhaupt nicht so genau ist. Hat es etwas mit verschiedenen Plattformen, verschiedenen Betriebssystemversionen, verschiedenen Compilern zu tun? Oder gibt es bestimmte Momente in der Programmierung, bei denen es strategisch vorteilhafter ist, einen Float über ein Double/Long Double zu verwenden?

Vielen Dank an alle!

19
floatfil

In fast allen Prozessoren benötigen "kleinere" Fließkommazahlen die gleichen oder weniger Taktzyklen zur Ausführung. Manchmal ist der Unterschied nicht sehr groß (oder nichts), manchmal kann er buchstäblich die doppelte Anzahl von Zyklen für double im Vergleich zu float sein. 

Natürlich ist auch der Speicherbedarf, der sich auf die Cache-Nutzung auswirkt, ein Faktor. float nimmt die halbe Größe von double und long double ist noch größer. 

Edit: Ein kleinerer Nebeneffekt ist, dass die SIMD-Erweiterungen des Prozessors (3DNow!, SSE, AVX in x86 und ähnliche Erweiterungen in mehreren anderen Architekturen verfügbar sind) entweder nur mit float funktionieren oder doppelt so viele float vs. . double (und soweit ich weiß, sind in keinem Prozessor SIMD-Anweisungen für long double verfügbar). Dies kann die Leistung verbessern, wenn float und double verwendet werden, indem doppelt so viele Daten gleichzeitig verarbeitet werden. Bearbeitung beenden 

Die Annahme einer Genauigkeit von 6-7 Stellen ist also gut genug für das, was Sie benötigen, und der Bereich von +/- 10+/- 38 ist ausreichend, dann sollte float verwendet werden. Wenn Sie entweder mehr Ziffern in der Zahl oder einen größeren Bereich benötigen, wechseln Sie zu double. Wenn dies nicht gut genug ist, verwenden Sie long double. Für die meisten Dinge sollte double vollkommen ausreichend sein. 

Offensichtlich wird die Wichtigkeit der Verwendung der "richtigen Größe" immer wichtiger, wenn Sie entweder über viele Berechnungen oder über viele Daten verfügen, mit denen Sie arbeiten können - wenn es 5 Variablen gibt und Sie jeweils nur ein paar Mal in einem Programm verwenden, das dies tut eine Million andere Dinge, wen interessiert das? Wenn Sie fließend dynamische Berechnungen durchführen, um zu ermitteln, wie gut ein Formel-1-Auto mit 200 Meilen pro Stunde fährt, müssen Sie wahrscheinlich mehrere Dutzend Millionen Datenpunkte berechnen, und jeder Datenpunkt muss Dutzende Male pro Sekunde des Fahrzeugs berechnet werden. Wenn Sie bei jeder Berechnung nur ein paar zusätzliche Taktzyklen verwenden, kann die gesamte Simulation deutlich länger dauern. 

25
Mats Petersson

Die Verwendung von Float kostet zwei Kosten, den offensichtlichen für den begrenzten Bereich und die Genauigkeit, und, weniger offensichtlich, die schwierigere Analyse, die diese Einschränkungen auferlegen.

Es ist oft relativ einfach zu bestimmen, ob das Doppelte ausreicht, selbst in Fällen, in denen ein erheblicher numerischer Analyseaufwand erforderlich ist, um zu zeigen, dass Float ausreichend ist. Dies spart Entwicklungskosten und das Risiko falscher Ergebnisse, wenn die schwierigere Analyse nicht korrekt durchgeführt wird.

Der größte Vorteil von Float bei vielen Prozessoren ist der geringere Speicherbedarf. Das bedeutet mehr Zahlen pro Cachezeile und mehr Speicherbandbreite in Bezug auf die pro Sekunde übertragenen Zahlen. Jeder Gewinn an Rechenleistung ist normalerweise relativ gering - in der Tat führen gängige Prozessoren alle Gleitkomma-Arithmetik in einem Format aus, das breiter als doppelt ist.

Es scheint am besten, double zu verwenden, es sei denn, zwei Bedingungen sind erfüllt. Es gibt genügend Zahlen, damit der Speicherbedarf der Speicher ein erhebliches Leistungsproblem darstellt. Die Entwickler können zeigen, dass Float genau genug ist.

5

Vielleicht interessieren Sie sich für die Antwort hier Soll ich double oder float verwenden?

Aber es kommt auf den Speicherbedarf im Vergleich zur Genauigkeit an, die Sie für eine bestimmte Situation benötigen. In einer Physik-Engine legen Sie möglicherweise mehr Wert auf Präzision. Daher ist es sinnvoller, ein Doppel- oder Lang-Doppel zu verwenden.

Fazit: Sie sollten nur so viel Genauigkeit verwenden, wie Sie für einen bestimmten Algorithmus benötigen 

2
Paul Renton

Das Grundprinzip hier wäre, nicht mehr als nötig zu verwenden. 

Die erste Überlegung ist die Verwendung des Speichers. Wahrscheinlich haben Sie das bereits erkannt, wenn Sie nur ein Doppel machen, aber was ist, wenn Sie eine Milliarde erstellen, als Sie nur doppelt so viel Speicherplatz verwendet haben, wie Sie auch hatten. 

Als nächstes kommt die Prozessorauslastung, ich glaube auf vielen Prozessoren, wenn Sie kleinere Datentypen verwenden, kann es eine Art Threading ausführen, bei dem mehrere Vorgänge gleichzeitig ausgeführt werden. 

Eine Erweiterung für diesen Teil der Antwort ist also SSE - Anweisungen Im Grunde erlaubt dies die Verwendung von gepackten Daten , um mehrere Gleitkommaoperationen gleichzeitig auszuführen, was in einem idealisierten Fall der Fall ist kann die Geschwindigkeit Ihres Programms verdoppeln.

Schließlich ist Lesbarkeit, wenn jemand Ihren Code liest, wenn Sie einen Float verwenden, wird er sofort feststellen, dass Sie eine bestimmte Anzahl nicht überschreiten. IMO wird manchmal die richtige Genauigkeit im Code besser fließen. 

1
aaronman

Ein Float benötigt weniger Speicher als ein Double. Wenn Sie also nicht benötigen, dass Ihre Zahl die Größe eines Double hat, können Sie auch einen Float verwenden, da dies weniger Speicherplatz beansprucht.

Genau so, als würden Sie nicht mit dem Bus fahren, um sich selbst und einen Freund an den Strand zu fahren ... Sie wären viel besser mit einem 2-Sitzer-Auto unterwegs.

Dasselbe gilt für ein Double über ein Long Double ... Sie müssen nur so viel Speicher reservieren, wie Sie benötigen. Andernfalls besteht bei komplexem Code die Gefahr, dass zu viel Speicher verwendet wird und Prozesse langsamer werden oder abstürzen.

0