同一公式中的两个 RAND() 函数会产生两个不同的随机数吗?

同一公式中的两个 RAND() 函数会产生两个不同的随机数吗?

我正在审阅别人的工作,但他们却无法轻易回答。下面的公式不应产生小于零的结果,因为它与不能为负的物理量有关。然而,它是:

=IFERROR(IF(((RAND()-0.5)*J6*I6)<0,0,(RAND()-0.5)*J6*I6),0)

“J”和“I”列的数字均为正数。我认为这是因为这两个RAND()函数彼此独立,因此每次计算时实际上是两个不同的随机数。是这样吗?

在这种情况下,包含函数的单独列RAND()和引用它们的列会起作用吗?

答案1

为了回答这个问题,我在 Excel 中写下了两个随机整数的和。如果随机数生成器在给定表达式中重复使用相同的值,则结果将始终为偶数。但事实并非如此!

因此,您的假设是正确的:每次调用都会提供一个全新的独立值。

使用单独的单元格实际上会将相同的值两次放入表达式中。您可以提取完整的子表达式(RAND()-0.5)*J6*I6)以提高公式的可读性。

答案2

您可以尝试放入一个单元格RAND()-RAND()。您将看到该值不为空。然后RAND调用两次并返回两个不同的值。

答案3

如果您需要两次都使用相同的值,并且该LET()函数可用,则可以使用:

=LET(Value,RAND(),

     IFERROR(  IF(  ((Value-0.5)*J6*I6)<0,  0,  (Value-0.5)*J6*I6),  0)
 )

它的工作原理看起来和听起来都和你希望的一样。原因之一是LET()允许设置变量以便只计算一次,而不是每次公式中需要相关值时都计算一次。

您可以通过在公式的两个地方使用单一结果来利用这一点。

相关内容