Checking if float es equivalente a un valor entero en python

En Python 3, estoy verificando si un valor dado es triangular, es decir, se puede representar como n (n + 1) / 2 para algún entero positivo n

¿Puedo escribir:

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

¿O tengo que hacerlo así? :

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

Verifiqué que ambas funciones devuelven los mismos resultados para x hasta 1,000,000. Pero no estoy seguro si, en general, int (x) == x siempre determinará correctamente si un número es entero, debido a los casos en que, por ejemplo, 5 se representa como 4.99999999999997 etc.

or lo que sé, la segunda forma es la correcta si lo hago en C, pero no estoy seguro acerca de Python 3.

Respuestas a la pregunta(10)

Su respuesta a la pregunta