Métodos de la biblioteca matemática en el lenguaje de programación Go de Google

9

He estado programando en Google Golang y lo he disfrutado debido a su brevedad, pero me parece sorprendente que casi todos sus métodos de biblioteca estándar de matemáticas sean para el tipo de punto flotante. ¿Hay alguna razón particular por la que estos métodos no existan para ints?

cobie
fuente

Respuestas:

9

La respuesta corta es que Go es un sucesor de C, y la biblioteca matemática estándar de C también se define casi exclusivamente en términos de valores de coma flotante de precisión simple y doble.

La respuesta más larga es que en un lenguaje de tipo estático sin polimorfismo o sobrecarga de funciones, como Go (o C), debe conformarse con un tipo para que una función tome y regrese con anticipación, y una vez que vaya a lidiar con tipos específicos en su biblioteca matemática, hay muchas más operaciones interesantes en números de coma flotante que números enteros. Para elegir algunos ejemplos

  • la raíz cuadrada o enésima de un número entero o de coma flotante generalmente no es representable como un número entero

  • muy pocos valores interesantes de funciones trascendentales son representables como enteros

  • la división de valores de coma flotante requiere menos redondeo que la división de enteros

Tenga en cuenta que esto no es tan oneroso como podría parecer si sus valores de entrada son enteros: un valor integral se puede convertir a un valor de coma flotante con un simple tipo de letra, y sobre todo con precisión.

Esa es la historia de idiomas como Go o C. Otros idiomas tienen otras opciones:

  • Un lenguaje de tipo dinámico puede proporcionar funciones de biblioteca matemática que toman o devuelven múltiples tipos dependiendo de cómo se llamen o si el valor de retorno es representable como un entero.

  • Un lenguaje con sobrecarga de funciones puede proporcionar múltiples versiones de la misma función, dependiendo de los tipos que pase (estrictamente, estas son funciones múltiples con el mismo nombre, a diferencia del caso de tipo dinámico anterior)

  • Un lenguaje con polimorfismo de tipo (como los lenguajes orientados a objetos con herencia) puede definir un "Número" de superclase con subclases para enteros y valores de punto flotante, y luego definir funciones matemáticas en términos de esta clase de Número. Este enfoque tiene gran parte de la flexibilidad del enfoque de lenguaje dinámico, al tiempo que mantiene gran parte de la rigurosidad del enfoque estático o de sobrecarga de funciones.

Go no tiene ninguna de estas características, sin embargo.

jimwise
fuente