2017-12-18 5 views
1

In Gos constant specification wird erwähnt, dass:Go Schiebezählwert zu groß

Numerische Konstanten genaue Werte von beliebiger Genauigkeit darstellen und nicht überlaufen. So

Ich versuchte

const VeryVeryBigNumber = 1 << 200

und es funktioniert. Die größte Anzahl an Shifts, die ich ausprobieren könnte, ist jedoch 511, und die Verwendung von 512 wirft folgende Werte:

shift count too large: 512.

Was bedeutet 512? Ich habe nicht die Absicht, es zu benutzen, ich will nur wissen, warum es auf 511 in meiner Maschine begrenzt ist (ich benutze ubuntu 64 Bit und gehe 1.9.2)?

Dank

Antwort

3

512 ist eine Art einer willkürlichen Grenze. Das einzige, was sagt die Spezifikation ist:

Implementierung Einschränkung: Obwohl numerische Konstanten beliebige Präzision in der Sprache haben, ein Compiler diese durch eine interne Darstellung mit begrenzten Genauigkeit realisieren kann. Das heißt, jede Implementierung muss:

Repräsentieren Integer-Konstanten mit mindestens 256 Bits.

Leider geben die comments around the limits keinen Grund.

Irgendwann muss ein Limit verwendet werden. Ich würde empfehlen, bei den erforderlichen 256 zu bleiben.

+0

Ah, genau dort in der Spezifikation ... Danke für die Antwort und den Code-Link. –