Métodos de biblioteca matemática na linguagem de programação Go do Google

9

Eu tenho programado no google Golang e o apreciado devido à sua brevidade, mas acho surpreendente que quase todos os seus métodos de biblioteca padrão de matemática sejam para o tipo de ponto flutuante. Existe alguma razão específica para que esses métodos não existam para ints?

cobie
fonte

Respostas:

9

A resposta curta é que Go é sucessor de C, e a biblioteca matemática padrão de C também é definida quase exclusivamente em termos de valores de ponto flutuante de precisão simples e dupla.

A resposta mais longa é que, em uma linguagem de tipo estático, sem polimorfismo ou sobrecarga de função, como Go (ou C), você precisa escolher um tipo para que uma função receba e retorne com antecedência, e quando você lidar com tipos específicos em sua biblioteca de matemática, há operações muito mais interessantes em números de ponto flutuante do que números inteiros. Para escolher alguns exemplos

  • a raiz quadrada ou enésima de um número inteiro ou de ponto flutuante geralmente não é representável como um número inteiro

  • muito poucos valores interessantes de funções transcendentais são representáveis ​​como números inteiros

  • A divisão dos valores de ponto flutuante requer menos arredondamento do que a divisão de números inteiros

Observe que isso não é tão oneroso quanto pode parecer se os valores de entrada forem inteiros - um valor integral pode ser convertido em um valor de ponto flutuante com uma conversão de texto simples e com maior precisão.

Essa é a história de idiomas como Go ou C. Outros idiomas têm outras opções:

  • Uma linguagem digitada dinamicamente pode fornecer funções da biblioteca matemática que aceitam ou retornam vários tipos, dependendo de como são chamadas ou se o valor de retorno é representável como um número inteiro.

  • Um idioma com sobrecarga de função pode fornecer várias versões da mesma função, dependendo dos tipos aprovados (estritamente, são várias funções com o mesmo nome, distintas do caso digitado dinamicamente acima)

  • Uma linguagem com polimorfismo de tipo (como linguagens orientadas a objetos com herança) pode definir uma superclasse "Number" com subclasses para números inteiros e valores de ponto flutuante e, em seguida, definir funções matemáticas em termos dessa classe Number. Essa abordagem possui grande flexibilidade da abordagem de linguagem dinâmica, enquanto mantém grande parte do rigor da abordagem estática ou de sobrecarga de função.

O Go não possui nenhum desses recursos, no entanto.

jimwise
fonte