Verificando se float é equivalente a um valor inteiro em python
o Python 3, estou verificando se um determinado valor é triangular, ou seja, ele pode ser representado como n (n + 1) / 2 para algum número inteiro positivo n
Posso apenas escrever:
import math
def is_triangular1(x):
num=(1/2) * (math.sqrt(8*x+1)-1 )
return int(num)==num
Ou eu preciso fazer assim? :
epsilon = 0.000000000001
def is_triangular2(x):
num=(1/2) * (math.sqrt(8*x+1)-1 )
return abs(int(num) - num)<epsilon
Verifiquei se as duas funções retornam os mesmos resultados para x até 1.000.000. Mas não tenho certeza se, de um modo geral, int (x) == x sempre determinará corretamente se um número é inteiro, devido aos casos em que, por exemplo, 5 é representado como 4.99999999999997 etc.
Até onde eu sei, a segunda maneira é a correta se eu fizer em C, mas não tenho certeza sobre o Python 3.