【发布时间】:2022-01-01 04:38:23
【问题描述】:
在 Python 3 中,我正在检查给定值是否为三角形,也就是说,对于某个正整数 n,它可以表示为 n * (n + 1) / 2。
我可以写吗:
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
我检查了这两个函数返回相同的结果 x 最多 1,000,000。但我不确定一般来说int(x) == x 是否总是能正确确定一个数字是否为整数,因为例如 5 表示为 4.99999999999997 等情况。
据我所知,如果我在 C 中使用第二种方法是正确的,但我不确定 Python 3。
【问题讨论】:
-
我知道您在询问浮点数和整数,但您可能会发现以下 Q 有用 stackoverflow.com/questions/5595425/…
-
两个函数的返回值可能相同,但由于某种原因,它们对我尝试过的所有数字都返回 True。
-
@Jochen,你在使用 Python3 吗?在 Python2 中
1/2==0所以num将永远只是0 -
@gnibbler:对了,我应该仔细阅读
标签: python floating-point