Vérifier si le flotteur est équivalent à une valeur entière en python

En Python 3, je suis de vérifier si une valeur donnée est triangulaire, qui est, il peut être représenté comme n(n+1)/2, pour un certain entier positif n

Je peux juste écrire:

import math
def is_triangular1(x):
    num=(1/2) * (math.sqrt(8*x+1)-1 )
    return int(num)==num

Ou dois-je le faire comme cela? :

epsilon = 0.000000000001
def is_triangular2(x):
    num=(1/2) * (math.sqrt(8*x+1)-1 )
    return abs(int(num) - num)<epsilon

J'ai vérifié que les deux fonctions renvoient les mêmes résultats pour x jusqu'à 1 000 000. Mais je ne suis pas sûr si généralement int(x) == x sera toujours correctement déterminer si un nombre est entier, parce que le cas lorsque, par exemple, 5 est représenté comme 4.99999999999997 etc.

Autant que je sache, la deuxième voie est la bonne, si je le fais en C, mais je ne suis pas sûr à propos de Python 3.

  • Je sais que vous vous posez des questions à propos des flotteurs et des services de renseignements mais vous pouvez trouver la suite de Q utiles stackoverflow.com/questions/5595425/...
  • Les deux fonctions peuvent renvoyer le même, mais pour une raison quelconque, ils retournent Vrai pour tous les nombres que j'ai essayé.
  • êtes-vous à l'aide de Python3? En Python2 1/2==0 donc num sera toujours juste être 0
  • ah oui, je devrais lire plus attentivement
InformationsquelleAutor Sunny88 | 2011-06-01