Frage

Gibt es Situationen, in denen es mehr Sinn machen würde, anstatt ein Doppel einen einzigen Datentyp zu benutzen? Aus meiner Suche ist der Nachteil eines doppelten, dass es mehr Platz benötigt, was aber kein Problem für die meisten Anwendungen ist. In diesem Fall sollten alle Gleitkommazahlen verdoppelt werden?

Ein wenig Hintergrundinformationen: Ich arbeite mit einer Anwendung, die mit einer Menge von Daten über Koordinaten und Chemikalien befaßt. Einige Kunden haben festgestellt, dass, wenn Tabellen von Daten, ist einige Werte mit hohen Genauigkeit sind abgerundet, die Präzision eines einzelnen importieren.

War es hilfreich?

Lösung

Bei den meisten Desktop-Anwendungen, ja.

Obwohl, wenn Sie eine riesige Auswahl an sie haben, zu halbieren, so groß wie die von Bedeutung sein könnte genug bewährt, wenn man die Genauigkeit nicht benötigen.

Vor allem da so ziemlich alle Verbraucher Desktops mit doppelter Genauigkeit Gleitkomma-Arithmetik in Hardware durchgeführt.

Andere Tipps

diesem .net Artikel

  

Datentyp Breite

     

Die effizientesten Datentypen sind   diejenigen, die die native Datenbreite verwenden   der Laufzeitplattform. Nach derzeitigem   Plattformen, ist die Datenbreite 32 Bits,   für den Computer und die   Betriebssystem.

     

Folglich Integer ist derzeit die   effizienteste Datentyp in Visual   Basic .NET. Weiter sind am besten Lang, Kurz,   und das Byte, in dieser Reihenfolge der Effizienz.   Sie können die Leistung von verbessern   Kurz und Byte durch ganzzahlige Ausschalten   Überlaufprüfung, beispielsweise durch   Einstellen der RemoveIntegerChecks   Eigentum, aber dies verursacht das Risiko von   falsche Berechnungen aufgrund   unentdeckt überläuft. Du kannst nicht   Aktivieren Sie diese Überprüfung ein- und ausgeschaltet während   Laufzeit; setzen Sie können nur ihren Wert   für den nächsten Build Ihrer   Anwendung.

     

Wenn Sie Bruchwerte, die   beste Wahl ist doppelt, weil die   Gleitkommaprozessor Strom   Plattformen führen alle Operationen in   Doppelte Genauigkeit. Weiter sind am besten Einzel   und Dezimal, in dieser Reihenfolge von   Effizienz.

Wie Mark in seinem Kommentar sagt, kann Platz ein Problem auf Speicher-constrained Systemen sein. Sie können auch indizieren möchten oder eine Liste sortieren, und warum die auf Doppel tun, wenn Sie Ihre Werte in Einzel speichern können?

Bei einiger Hardware, Rechendoppel Werte umfasst länger dauern kann, als daß die Einbeziehung Einzelwert, aber jüngste FPU hat einen einzigen nativen Datentyp (zB 80-Bit erweitert für x86-Gleitkommazahlen), die für die Berechnungen intern verwendet wird, unabhängig davon, was im Speicher befindlichen Daten geben Sie verwenden. Also das heißt, dass „FPU Berechnungen mit einfacher Genauigkeit wird schneller sein“ wird in der Regel nicht ein Grund, mit einfacher Genauigkeit zu verwenden, auf den meisten modernen Hardware heute.

Wie gesagt, zusätzlich zu dem „weniger Speicher“ näher erläuterten Gründe in den anderen Antworten auf, gibt einen praktischen Grund ist, wenn es darum geht, SIMD-Vektorbefehle wie SSE und AltiVec - mit einfacher Genauigkeit ist likey doppelt so schnell zu sein als doppelter Genauigkeit, da arbeiten die Anweisungen auf Vektoren fester Größe, und Sie können doppelt so viele einzelne Präzisionswerte in einem einzigen Vektor, mit der Verarbeitungszeit die gleiche Regel verbleibenden stopfen.

Zum Beispiel mit einer 128-Bit-Vektoreinheit verarbeiten kann Vektor-Multiplikationen in zwei Taktzyklen Sie einen Durchsatz von 2 Einzel Präzision Multiplikationen pro Takt, im Vergleich zu 1 mit doppelter Genauigkeit, da Sie kann 4 Singles in einem Vektor erhalten könnten, im Vergleich zu zwei Doppelzimmern.

Ein ähnlicher Effekt tritt mit Speicherbandbreite und ist für Vektorverarbeitung nicht spezifisch - wenn Sie große Arrays von verdoppelt haben, werden sie nicht nur doppelt so viel Platz nehmen, sondern kann bis doppelt so lange in dem Fall zu verarbeiten, Ihr Algorithmus wird die Bandbreite eingeschränkt.

(was immer wahrscheinlicher, die steigenden Größen und abnehm Latenzen von Vektorverarbeitungseinheiten gegeben ist)

Doubles mehr Platz in Anspruch nehmen, aber die zusätzliche Genauigkeit kann oder auch nicht notwendig sein. Ich habe eine Menge Programmierung in der wissenschaftlichen Welt getan, wo Gleitkomma-Arithmetik ist sehr verbreitet und haben festgestellt, dass oft können Sie die Berechnungen in doppelter oder höherer Präzision zu tun, aber die Ergebnisse als Singles ohne schädliche Wirkung speichern.

Beachten Sie, dass, sobald die Zahlen in die FPU gesaugt werden, sie erweitert werden ohnehin sehr hohe Präzision. Davon abgesehen, wäre es am besten, um zu versuchen, was Sie in den beiden Genauigkeiten tun und sehen, ob die Ergebnisse vergleichbar sind.

Leider Computing ist noch eine experimentelle Wissenschaft.

Wenn Sie OpenGL sind Codierung dann ist es normal GLSingle (zB Einzel) statt GLDouble zu verwenden. In fast allen Fällen ist einfacher Genauigkeit mehr als genug für die meisten Grafikanwendungen und sollte schneller sein - obwohl ich ich bin nicht sicher, dies auf der neuesten Generation von GPUs bekennen.

Mein Lieblingszitat dazu ist, dass mit einfacher Genauigkeit ausreichend war, um den Mond zu navigieren und zurück, so in der Praxis ungewöhnlich es ist ein echtes Problem zu verursachen. Das heißt in den meisten Fällen mich für ein Doppel heute erreichen würde als Speicher billig ist und es weniger wahrscheinlich, jede ungerade binär seine Probleme in Dezimalzahlen.

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