Warum gibt es int, aber float nicht in Go?

8

In Go gibt es den Typ int , der abhängig von der Systemarchitektur int32 oder int64 entspricht. Ich kann eine Integer-Variable deklarieren, ohne sich über ihre Größe Gedanken machen zu müssen:

%Vor%

Warum gibt es nicht den Typ float , der in Abhängigkeit von der Architektur meines Systems zu float32 oder float64 äquivalent wäre? Ich wünschte, ich könnte auch tun:

%Vor%     
cd1 22.06.2014, 18:37
quelle

2 Antworten

11

float wurden in der Veröffentlichung vom 20.01.2011 entfernt.

>

Sie können weiterhin eine kurze Variablendeklaration verwenden:

%Vor%

Aber wie in den GO-FAQ erwähnt:

  

Aus Gründen der Portabilität haben wir uns entschieden, die Dinge auf Kosten expliziter Konvertierungen im Code klar und übersichtlich zu gestalten.

Sie können die Debatte vor 2011 sehen in diesem Thread :

  
    

Ich bin ein wenig bestürzt darüber, den Vorschlag zu sehen, den unsoliden Float und die komplexen Typen loszuwerden     Die Menschen mussten sich für eine Generation (eine menschliche Generation, nicht eine Computergeneration) nicht wirklich mit diesem Problem befassen; das war in den frühen 90er Jahren das letzte Mal, dass dies wirklich ein Thema war), aber genau dies ist der Zeitpunkt, zu dem ich denke, dass es wieder relevant wird.
    Zwischen dem Übergang zu 64-Bit-Chips und dem Übergang zu Nicht-Intel-basierten Plattformen     (mobile Chips, GPUs, etc.), ich denke, es ist ein großer Fehler, diese Typen herauszunehmen.

  
     

Das Problem mit der Analogie zwischen Integertypen und Float-Typen ist:

     
  • Bei Integer-Typen interessiert Sie die Größe nicht, es sei denn, sie überläuft .
  •   
  • Bei Float-Typen müssen Sie immer auf die Größe achten, da sie immer Ihre Antwort beeinflusst (es sei denn, Sie arithmetieren nur kleine ganze Zahlen * 2^n , in diesem Fall ist es genau, in welchem ​​Fall) Sie wären mit einer Festkomma-Darstellung besser dran.)   Also gibt es nicht die selbe Möglichkeit von "Ich will nur eine gute Repräsentation" .
  •   

Es gab noch nie einen Geschwindigkeitsvorteil für 32-Bit-Gleitkommazahlen, außer hinsichtlich der Speicherbenutzung (und des Cache), so dass der vorhandene 32-Bit-Gleitkommatyp nicht als "schnelles" Gleitkomma definiert ist. Es ist nur da (ich vermute), weil es in C heißt. Ich würde nichts dagegen haben, wenn die   float64 wurde "double" genannt, was in den meisten mir bekannten Sprachen der Fall ist.

     

Aber ich glaube wirklich, dass die Sprache ohne den "float" -Typ schöner wäre.
  Die Größe spielt bei der Verwendung von Gleitkommazahlen wirklich eine Rolle, entweder wegen des Speicherverbrauchs oder wegen der erforderlichen Genauigkeit.

    
VonC 22.06.2014, 18:44
quelle
6

Bei Ganzzahlen ist es sehr üblich, einen Integertyp zu verwenden, dessen Größe die native Wortgröße der Plattform ist. Dies hat Leistungsvorteile und Vorteile für die Interoperabilität auf niedriger Ebene mit anderen Teilen des Systems, die die Wortgröße verwenden.

Bei Gleitkommawerten ist dies nicht der Fall. Selbst auf 32-Bit-Systemen ist Float mit doppelter Genauigkeit (Go's float64 ) im Allgemeinen viel häufiger und im Allgemeinen nicht langsamer als Single-Precision ( float32 ). Gleitkommaarithmetik mit einfacher Genauigkeit ist relativ unüblich und ist im Allgemeinen nur dann nützlich, wenn die Speichernutzung oder die Eingabe- / Ausgabegeschwindigkeit viel stärker berücksichtigt wird.

Obwohl Sie schreiben, dass float "äquivalent zu float32 oder float64 sein würde, abhängig von der Architektur Ihres Systems", bin ich mir nicht sicher, welche Architektur Ihrer Meinung nach mit float32 gleichgesetzt werden sollte. .

    
ruakh 22.06.2014 18:48
quelle

Tags und Links