Warum funktioniert die Python-hash der Unendlichkeit haben die Ziffern von π?

Den hash der Unendlichkeit in Python hat digits matching pi:

>>> inf = float('inf')
>>> hash(inf)
314159
>>> int(math.pi*1e5)
314159

Ist das nur Zufall oder ist es gewollt?

  • Nicht sicher, aber meine Vermutung wäre, dass es als absichtlich, als hash(float('nan')) wird 0.
  • Hmm, keine Erwähnung darüber, dass in sys.hash_info. Easter egg?
  • Scheint, wie jemand in eine Frivole Stimmung eines Tages. Aber-warum nicht?
  • Fragen Sie Tim Peters. Hier ist die commit-wo er eingeführt, diese Konstante, die vor 19 Jahren: github.com/python/cpython/commit/.... Ich behielt diese Besondere Werte, wenn ich überarbeitet der numerischen hash in bugs.python.org/issue8188
  • Danke. Es sieht aus wie Tim kann auch verwendet die Ziffern von e für hash -inf ursprünglich.
  • Ah ja, stimmt. Und anscheinend habe ich geändert, um -314159. Ich hatte vergessen, dass.
  • Wussten Sie testen diese in python-Implementierungen andere als CPython? PyPy, Jython? Wenn nicht, sollten Sie diesem tag mit der entsprechenden Laufzeit, wie es wahrscheinlich ist, spezifisch für die Umsetzung (ob absichtlich oder nicht).
  • Ja, habe ich. Dieses Ergebnis ist dasselbe in CPython, PyPy und Jython.
  • Bitte Bearbeiten Sie die Frage, weil die Antworten nicht erklären, warum andere Laufzeiten das gleiche zu tun.
  • Der genaue Wert der hash nicht dokumentiert; die docs nur Zustand es ist gespeichert in sys.hash_info.inf, so ist es eindeutig nicht eine Sprache, die standard-und daher muss eine Implementierung detail. Diese Informationen haben sollten, kommen, um Licht in Ihre Forschung, was bedeutet, es gehört in die Frage.
  • Ich bin glücklich, mit der Frage in der aktuellen form, aber jeder hat Schreibrechte - wenn Sie denken, dass etwas fehlt (in der Frage oder den Antworten) nur gehen Sie vor und Bearbeiten.

InformationsquelleAutor wim | 2019-05-20
Schreibe einen Kommentar