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.

questionAnswers(10)

yourAnswerToTheQuestion