В Python 3 я проверяю, является ли данное значение треугольным, т.е. оно может быть представлено как n (n + 1)/2 для некоторого натурального n
Могу ли я просто написать:
import math
def is_triangular1(x):
num=(1/2) * (math.sqrt(8*x+1)-1 )
return int(num)==num
Или мне нужно сделать это так?
epsilon = 0.000000000001
def is_triangular2(x):
num=(1/2) * (math.sqrt(8*x+1)-1 )
return abs(int(num) - num)<epsilon
Я проверил, что обе функции возвращают одинаковые результаты для х до 1 000 000. Но я не уверен, что, вообще говоря, int (x) == x всегда будет правильно определять, является ли число целым, из-за случаев, когда пример 5 представлен как 4.99999999999997 и т.д.
Насколько я знаю, второй способ является правильным, если я делаю это на C, но я не уверен в Python 3.