Méthodes de bibliothèque mathématique dans le langage de programmation Go de Google

9

J'ai programmé dans google Golang et je l'ai apprécié en raison de sa brièveté, mais je trouve surprenant que presque toutes ses méthodes de bibliothèque standard Math soient pour le type à virgule flottante. Y a-t-il une raison particulière pour laquelle ces méthodes n'existent pas pour les ints?

cobie
la source

Réponses:

9

La réponse courte est que Go est un successeur de C, et la bibliothèque mathématique standard de C est également définie presque exclusivement en termes de valeurs à virgule flottante simple et double précision.

La réponse la plus longue est que dans un langage de type statique sans polymorphisme ni surcharge de fonction, comme Go (ou C), vous devez vous contenter d'un type de fonction à prendre et à retourner à l'avance, et une fois que vous allez traiter types spécifiques dans votre bibliothèque mathématique, il y a beaucoup plus d'opérations intéressantes sur les nombres à virgule flottante que sur les entiers. Pour choisir quelques exemples

  • la racine carrée ou nième d'un nombre entier ou à virgule flottante n'est généralement pas représentable comme un entier

  • très peu de valeurs intéressantes des fonctions transcendantales sont représentables sous forme d'entiers

  • la division des valeurs en virgule flottante nécessite moins d'arrondi que la division des nombres entiers

Notez que ce n'est pas aussi onéreux que cela puisse paraître si vos valeurs d'entrée sont des nombres entiers - une valeur intégrale peut être convertie en valeur à virgule flottante avec un transtypage simple, et surtout avec précision.

Voilà donc l'histoire de langues comme Go ou C. D'autres langues ont d'autres options:

  • Un langage typé dynamiquement peut fournir des fonctions de bibliothèque mathématique qui acceptent ou renvoient plusieurs types selon ce avec quoi elles sont appelées ou selon que la valeur de retour est représentable sous forme d'entier.

  • Un langage avec surcharge de fonctions peut fournir plusieurs versions de la même fonction, selon les types que vous passez (strictement, ce sont plusieurs fonctions avec le même nom, distinctes du cas typé dynamiquement ci-dessus)

  • Un langage de polymorphisme de type (comme les langages orientés objet avec héritage) peut définir une superclasse "Number" avec des sous-classes pour les nombres entiers et les valeurs à virgule flottante, puis définir des fonctions mathématiques en termes de cette classe Number. Cette approche a une grande partie de la flexibilité de l'approche de langage dynamique, tout en conservant une grande partie de la rigueur de l'approche statique ou de surcharge de fonctions.

Go n'a cependant aucune de ces fonctionnalités.

Jimwise
la source