Pourquoi la fonction sinus de numpy ne donne pas 0 pour sin(pi) ?
Parce que Python fait du calcul avec des flottants et pas du calcul formel ?
En effet, Python, avec ou sans Numpy, fait du calcul numérique (comme Matlab ou Scilab) et non formel (comme Maple, Mathematica ou Maxima), avec les imprécisions de calcul que cela implique (voir aussi le module decimal pour gérer la précision en Python pur). Quelques liens (pour tout public) pour compléter :
- Un ordinateur est-il une parfaite machine à calculer ?
- Erreurs en arithmétique des ordinateurs
- Informatique en seconde : que savoir sur les flottants ? (qui parle un peu plus spécifiquement de Python)
Par ailleurs, pour Python, il existe Sympy pour faire du calcul formel. Et là pour le coup sympy.sin(sympy.pi)==0
.
Merci pour ces références, je pensais que sinus était calculé à partir d’un développement limité et que l’erreur était due à l’imprécision de pi mais alors je ne m’explique pas pour quoi sin(pi/2)-1=0. Est-il possible d’accéder au code permettant de calculer sinus pour mieux comprendre ces erreurs?
Tu peux lire le code de la fonction sin présente dans la bibliothèque math mais si il y a de grandes chances pour que ce soit en C.
Pour info, en Python pur (et decimal
n’implémente pas les fonctions trigo) :
CPython implementation detail: The
math
module consists mostly of thin wrappers around the platform C math library functions.
Pour ce qui est de numpy
il faudrait voir le code, mais généralement c’est assez illisible si la doc ne suit pas. Je sais que le projet GNU MPFR a une doc assez claire sur le sujet.