2 votes

Tester si un point aléatoire appartient à la circonférence d'un cercle en utilisant Python

J'essaie de générer un point aléatoire sur la circonférence d'un cercle en utilisant Python.

J'ai un cercle de centre (0, 0) et de rayon 50. J'ai fait ce qui suit.

import numpy as np
angle = 2 * np.pi * np.random.rand()
x = np.cos(angle) * 50
y = np.sin(angle) * 50

Mais quand je teste pour voir si le point est effectivement sur la circonférence du cercle, je fais ceci

x ** 2 + y ** 2 == 50 ** 2

mais je reçois

False

Pourquoi ?

6voto

Erik Godard Points 1004

C'est le résultat de l'imprécision de la virgule flottante. En général, c'est une mauvaise idée de comparer deux flottants pour l'égalité, et vous devriez plutôt tester pour voir s'ils sont dans une certaine quantité l'un de l'autre. Par exemple,

epsilon = 0.000001
print abs(x ** 2 + y ** 2  - 50 ** 2) <= epsilson

Voir aussi : Comment faire une comparaison en virgule flottante ?

3voto

Scott Hunter Points 10356

L'arithmétique à virgule flottante n'étant pas exacte, les tests d'égalité ne fonctionnent pas toujours comme on pourrait s'y attendre avec une précision infinie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X