嗨,我想生成两个随机数,使它们的平方和等于1。
我写了这段代码。它们的平方和可能不完全等于1,但应该接近0.999。我也用过if(math.isclose(abs(gene_value_1)**2 + abs(gene_value_2)**2, 1))但它不起作用。

gene_value_1 = random.uniform(0, 1)
gene_value_2 = random.uniform(0, 1)
if(abs(gene_value_1)**2 + abs(gene_value_2)**2) == 1:
    print(added)

我想生成两个随机数,它们的平方和几乎等于1。

最佳答案

你的要求不是两个不同的数字。它是针对一对平方和等于1的数字。
如果x**2 + y**2 = 1,则y完全由xy = sqrt(1 - x**2)决定:

gene_value_1 = random.uniform(0, 1)
gene_value_2 = math.sqrt(1.0 - gene_value_1**2)

正如对问题和这个答案的评论中所提到的,以这种方式获得的分布对于这两个数字是不均匀的。因为gene_value_1gene_value_2在统一的情况下可以描述笛卡尔空间中的单位圆,所以可以
angle = random.uniform(0, 2 * math.pi)
gene_value_1 = math.cos(angle)
gene_value_2 = math.sin(angle)

09-04 15:43