PETSc - 如何计算 0 到 1 之间的随机数?

计算科学 宠物 随机数生成
2021-12-26 18:42:24

在 PETSc 中,我需要生成一个介于 1 和 0 之间的随机数。

使用 include cstdlib,经典技巧是:

(double)rand() / (double)RAND_MAX

在 PETSc 中,该常数RAND_MAX似乎不存在。

有解决办法吗?

虽然它很丑,但我打算做类似的事情:

(rand() % 10000) / 10000.0
1个回答

为了详细说明 Paul 的观点,并行生成伪随机数需要一定的注意。通常,当您生成 PRN 时,您会将系统时间设置为毫秒级。但是,如果您在并行程序中执行此操作,您很可能会在每个进程上为生成器播种相同的时间,从而在每个处理器上为您提供相同的伪随机序列。

PETSc 确实有一个函数PetscRandomCreate,但它的文档甚至告诫你

...它不应该用于复杂的并行蒙特卡罗方法,因为它很可能没有跨处理器的正确统计数据。

您可以自行决定此警告是否适用于您的案件。无论哪种方式,使用QQ 图之类的东西来检查您生成的随机数是否具有您认为的分布总是一个好主意。