In welchen Situationen ist es besser, ein Float über ein Double in Java zu verwenden? [geschlossen]

8

Genauer gesagt, wie extrem ist die Leistungssteigerung, wenn in Java ein Float statt eines Double verwendet wird?

    
Julian 30.01.2014, 00:33
quelle

5 Antworten

5

Da sich Ihre Frage hauptsächlich auf die Leistung bezieht, werden in diesem Artikel einige spezifische Berechnungen durchgeführt (beachten Sie jedoch, dass dieser Artikel spezifisch für neuronale Netzwerke ist und Ihre Berechnungen möglicherweise völlig anders sind als in dem Artikel). : Ссылка

Einige der relevanten Materialien aus dem Link sind hier wiedergegeben:

  

Sowohl Double als auch Float können relativ große Zahlen unterstützen. Der obere   und niedrigere Bereich sind wirklich keine Berücksichtigung für neuronale Netze.   Float kann Zahlen zwischen 1.40129846432481707e-45 zu behandeln   3.40282346638528860e + 38 ... Grundsätzlich kann float etwa 7 Nachkommastellen verarbeiten. Ein Double kann etwa 16 Dezimalstellen verarbeiten.

     

Matrixmultiplikation ist eine der häufigsten mathematischen Methoden   Operationen für die Programmierung von neuronalen Netzen. Auf keinen Fall ist es das einzige   Operation, aber es wird eine gute Benchmark geben. Das folgende Programm   wird verwendet, um ein Double zu benchmarken.

Wenn Sie den gesamten Code überspringen, zeigt die Tabelle auf der Website an, dass sie für eine 100x100-Matrix-Multiplikation einen Leistungszuwachs von etwa 10% haben, wenn sie Doubles verwenden. Bei einer Matrixmultiplikation von 500 x 100 beträgt der Leistungsverlust aufgrund der Verwendung von Doubles etwa 7%. Und für eine Matrixmultiplikation von 1000 x 1000 ist dieser Verlust ungefähr 17%.

  

Bei der kleinen 100x100-Matrix kann die Umschaltung auf Float tatsächlich abnehmen   Performance. Wenn die Größe der Matrix zunimmt, steigt der prozentuale Gewinn   erhöht sich. Bei einer sehr großen Matrix erhöht sich der Leistungsgewinn auf   17%. 17% ist eine Überlegung wert.

    
Nicolás Carlo 30.01.2014, 01:30
quelle
9

Normalerweise würde ich double verwenden, weil float für viele numerische Anwendungsfälle nicht ausreichend genau ist und der Leistungsunterschied klein genug ist, um keine Rolle zu spielen.

>

Wie immer hängt die Leistung von der Implementierung ab, daher müssen Sie in Ihrem speziellen Fall einen Benchmark erstellen, um festzustellen, ob es "wichtig" ist oder nicht.

Im Allgemeinen habe ich gefunden:

  • Der Leistungsunterschied für einzelne Vorgänge ist besonders auf 64-Bit-Rechnern ziemlich gering. Sowohl ein float als auch ein long passen in ein 64-Bit Maschinenwort. Oft gibt es keinen Unterschied.
  • float s haben einen leichten Vorteil dadurch, dass sie weniger Speicher verbrauchen, und dies kann helfen, den CPU-Cache-Druck zu reduzieren. Ich habe herausgefunden, dass Floats 30-50% schneller sind, wenn einfache Operationen über große Arrays ausgeführt werden.
mikera 30.01.2014 00:39
quelle
2

Warum int anstelle von long ?

Warum short anstelle von int ?

Warum byte anstelle von short ?

Hier geht es um die Gründe für die Leistung und den Speicherverbrauch. In der Theorie bedeutet mehr Reichweite mehr Speicher, mehr Speicher benötigt mehr von Ihrer Hardware und es bedeutet, dass mehr Batterie verwendet wird.

Heutige Maschinen haben eine hohe Leistung mit primitiven Typen. Sie sehen also möglicherweise keinen Unterschied, wenn Sie lange statt doppelt und umgekehrt verwenden, aber Internetverbindungen können je nach Land langsam sein, deshalb sollten Sie in diesem Fall lieber den Float als den doppelten verwenden.

Lass uns über short vs int sprechen.

Verwenden Sie weniger Speicher als int , aber es dauert 30% mehr Zeit für die Erstellung (Java), also verwenden Sie besser int anstelle von short ? Hängt davon ab, dass ein Array mit 100 short s viel weniger Speicher benötigt als ein Array mit 100 int s.

Eine Schleife mit short kann effizienter sein als eine Schleife mit int .

Im Internet ist short viel effizienter als int , egal ob 30% mehr benötigt werden, die Bandbreite wird klein sein und die Erfahrung wird besser sein.

Ich würde dir empfehlen, nur das zu verwenden, was du brauchst. Denken Sie daran: warum 80, wenn 8 es tun kann?

    
Murillo Henrique 30.01.2014 01:23
quelle
1

Meist bei Embedded Systems ohne CPU mit schnellen Doppeloperationen. ZB Navigationssysteme, mit CPU-intensiven Berechnungen. Aber in Java werden viele Math-Bibliotheken implizit in Double konvertiert, so dass es in vielen Fällen wenig sinnvoll ist, Float zu verwenden.

Floats benötigen die Hälfte des Speichers und haben einen Vorteil, wenn Sie sehr große Arrays und begrenzten Speicher (in eingebetteten Geräten) haben

    
AlexWien 30.01.2014 01:25
quelle
0

Es gibt zwei Bedingungen, die erfüllt werden sollten, um float anstelle von double zu verwenden:

  1. Es gibt einen signifikanten, nützlichen Leistungsgewinn.
  2. Float ist genau genug für die Berechnung.

Die Bewertung der ersten Bedingung ist relativ einfach und einfach. Messen Sie den Job mit double. Messen Sie erneut mit den gleichen Eingaben und anderen Bedingungen, indem Sie float verwenden. Ist die Float-Version wesentlich schneller? Im Allgemeinen besteht der Hauptvorteil in der effizienteren Nutzung von Caches, Speicher und Datenübertragungsbandbreite.

Der schwierige Teil ist die Bewertung der zweiten Bedingung. Ungenaue Antworten oder falsche Antworten zu bekommen, ist nutzlos. Für viele Berechnungen kann eine relativ einfache Analyse zeigen, dass doppelt genau genug ist. Das gleiche für Float zu zeigen, ist oft viel schwieriger.

    
Patricia Shanahan 30.01.2014 01:23
quelle

Tags und Links