¿Los mismos algoritmos dan resultados diferentes en diferentes paquetes / idiomas?

Una cosa a tener en cuenta entre los idiomas es que los límites de la aritmética pueden diferir. Esto puede dar resultados diferentes para aparentemente el mismo algoritmo en diferentes idiomas o incluso en diferentes procesadores.

C ++:

int i = ~0; // value of i depends on the processor (bitness).

Java:

int i = ~0; // value of i is fixed, by the specification.

Digo “aparentemente” ya que el algoritmo ejecutado por la máquina es una transformación del lenguaje de entrada que es una implementación del algoritmo. El otro caso a considerar es si el algoritmo y / o la implementación es determinista (algoritmo no determinista – Wikipedia). Los bucles que iteran sobre mapas hash tienden a iterar sobre ellos en orden f (hash) . En implementaciones típicas, el orden tiende a depender de una función hash proporcionada por el lenguaje. En Go, estos bucles se especifican como no deterministas (aunque no aleatorios). En la mayoría de los idiomas, los resultados serán deterministas, pero no coincidirán con los resultados de otro idioma.

“¿Los mismos algoritmos dan resultados diferentes en diferentes paquetes / idiomas?” No, por supuesto que no. Los algoritmos son, por su naturaleza, independientes del lenguaje. Si implementa un algoritmo de ordenación como quicksort o una función hash como SHA-256 en cualquier idioma (FORTRAN, C, Smalltalk, Haskell, LISP, Pascal, Algol, …) cualquier idioma, debe esperar que devuelva exactamente el mismo resultado dado la misma entrada. Lo eficiente que sea dependerá del idioma, pero el resultado no lo hará.

Esto se debe a que un algoritmo es una especificación de un proceso, esencialmente, un programa. La traducción de ese programa a cualquier otro idioma no tiene ningún efecto sobre lo que hace o cómo se lleva a cabo.