Methoden der Mathematikbibliothek in Googles Programmiersprache Go


9

Ich habe in Google Golang programmiert und es aufgrund seiner Kürze genossen, aber ich finde es überraschend, dass fast alle Methoden der Math-Standardbibliothek für den Gleitkommatyp sind. Gibt es einen bestimmten Grund, warum diese Methoden für Ints nicht existieren?

Antworten:


9

Die kurze Antwort lautet, dass Go ein Nachfolger von C ist und die Standard-Mathematikbibliothek von C fast ausschließlich in Form von Gleitkommawerten mit einfacher und doppelter Genauigkeit definiert wird.

Die längere Antwort lautet: In einer statisch typisierten Sprache ohne Polymorphismus oder Funktionsüberladung wie Go (oder C) müssen Sie sich für einen Typ entscheiden, damit eine Funktion im Voraus übernommen und zurückgegeben werden kann, und sobald Sie sich damit befassen Bei bestimmten Typen in Ihrer Mathematikbibliothek gibt es viel interessantere Operationen für Gleitkommazahlen als Ganzzahlen. Um einige Beispiele zu nennen

  • Die Quadrat- oder n-te Wurzel einer Ganzzahl oder Gleitkommazahl ist normalerweise nicht als Ganzzahl darstellbar

  • Sehr wenige interessante Werte transzendentaler Funktionen sind als ganze Zahlen darstellbar

  • Die Division von Gleitkommawerten erfordert weniger Rundung als die Division von ganzen Zahlen

Beachten Sie, dass dies nicht so lästig ist, wie es scheint, wenn Ihre Eingabewerte Ganzzahlen sind. Ein Integralwert kann mit einer einfachen Typumwandlung und meistens genau in einen Gleitkommawert konvertiert werden.

Das ist also die Geschichte für Sprachen wie Go oder C. Andere Sprachen haben andere Möglichkeiten:

  • Eine dynamisch typisierte Sprache kann Funktionen der Mathematikbibliothek bereitstellen, die mehrere Typen annehmen oder zurückgeben, je nachdem, mit was sie aufgerufen werden oder ob der Rückgabewert als Ganzzahl darstellbar ist.

  • Eine Sprache mit Funktionsüberladung kann abhängig von den übergebenen Typen mehrere Versionen derselben Funktion bereitstellen (dies sind streng genommen mehrere Funktionen mit demselben Namen, im Unterschied zu dem oben beschriebenen dynamisch typisierten Fall).

  • Eine Sprache mit Typpolymorphismus (z. B. objektorientierte Sprachen mit Vererbung) kann eine Oberklasse "Zahl" mit Unterklassen sowohl für Ganzzahlen als auch für Gleitkommawerte definieren und dann mathematische Funktionen in Bezug auf diese Zahlenklasse definieren. Dieser Ansatz hat einen großen Teil der Flexibilität des dynamischen Sprachansatzes, während ein Großteil der Strenge des statischen oder funktionsüberlastenden Ansatzes beibehalten wird.

Go verfügt jedoch über keine dieser Funktionen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.