propias - ¿Dónde puedo inspeccionar las funciones matemáticas de Python?
lista de funciones de python (4)
Algunos módulos están escritos en C y no en python, por lo que no podría encontrar los archivos .py. Para una lista de estos puedes usar:
import sys
print sys.builtin_module_names
Como está escrito en C, deberás encontrarlo en el código fuente. Si ya tienes la fuente, está en el directorio de módulos.
Me gustaría ver la forma en que Python calcula las raíces cuadradas, así que traté de encontrar la definición para math.sqrt()
, pero no puedo encontrarla en ninguna parte. He buscado en _math.c
, mathmodule.c
, y en otros lugares.
Sé que Python utiliza las funciones matemáticas de C, pero ¿están en algún lugar de la distribución de Python o están vinculadas a un código en otra parte? Estoy usando Mac OS X.
¿Dónde está el algoritmo en math.sqrt()
?
Depende de la implementación. CPython está utilizando funciones matemáticas de la biblioteca C estándar. Jython es muy probable que esté usando los métodos matemáticos de Java. Y así.
De hecho, Python no tiene nada que ver con la implementación real de las funciones matemáticas. Esos están más relacionados con IEEE 754, que se usa casi exclusivamente para representar números de punto flotante en las computadoras hoy en día.
De todos modos, hablando en términos de CPython, su módulo math
es solo una envoltura delgada sobre las funciones de C ( prooflink , en la parte inferior de la página). Las funciones C se implementan como parte de la biblioteca C estándar. Generalmente se incluye en las distribuciones de SO y lo más probable es que se distribuya en forma binaria, sin fuentes. Tenga en cuenta también que muchos microprocesadores tienen instrucciones especializadas para algunas de estas operaciones, y su compilador puede utilizarlas en lugar de saltar a la implementación en la biblioteca de C.
No puedo decirle el algoritmo exacto que se usa en la biblioteca C estándar en su sistema. Algunos de los algoritmos posibles se explican here .
En el caso específico de OS X, las funciones matemáticas viven en libSystem.dylib
, que desafortunadamente no es de código abierto (solo hay código de código auxiliar disponible en el sitio de código abierto de Apple ). Sin embargo, puede desmontarlo si está interesado: en los sistemas actuales, pruebe, por ejemplo
otool -tvV /usr/lib/system/libsystem_m.dylib
No estoy seguro de dónde encontrar el algoritmo exacto usado por Python, pero espero que esto te ayude. La forma más fácil de calcular una raíz cuadrada en Python es usando el operador ** (potencia). No sé cuánto trabajo has hecho con los índices, pero la raíz cuadrada es lo mismo que poner algo en el poder de una mitad. Entonces, siendo cierto que podrías usar:
print x**0.5
Esto imprime la raíz cuadrada de cualquier número que pongas en lugar de x. Por supuesto, si está usando Python 3, tendrá que escribir esto como:
print(x**0.5)
Esa sería la forma más fácil de hacer un algoritmo para calcular la raíz cuadrada de un número. Esto podría implementarse en una función como:
sqrt(x):
return x**0.5
Para otras raíces, como la raíz cúbica, etc., podría usar una función como esta:
root(x, root):
return x**root
Y cuando esté pasando el número raíz a la función, use los números de los índices en forma decimal, por ejemplo:
2: 0.5
3: 0.33333333 (recurrente)
4: 0.25
5: 0.2
Espero que puedas ver el patrón. ¡También espero que esto te haya ayudado un poco! :)
Un simple grep sobre el código hubiera ayudado:
http://svn.python.org/view/python/trunk/Modules/cmathmodule.c?revision=76978&view=markup