在pcl示例中经常看到:
1024 * rand () / (RAND_MAX + 1.0f)
一开始以为这应该产生 0到1024 的一个随机数,后来却发现是 -1 到 1 的一个数,思考结果如下。
在 c 或 c++ 中,rand() 表示生成 0 到 RAND_MAX 之间的数字。“rand () / (RAND_MAX + 1.0f)”表示生成 0 到 1 之间的数字。
但是当我们在rand()之前乘一个数,按照规则,N * rand()会先运行。一般来说int的最大值是2147483647,和RAND_MAX是一样的。
因此,由于结果是int类型,可能发生溢出,“N * rand()”将是介于 -INT_MAX(== -RAND_MAX) 和 INT_MAX( == RAND_MAX) 之间的数字。
在这种情况下,“N*rand () / (RAND_MAX + 1.0f)”表示介于 -1 和 1 之间的数字。
N理论上可以是任何数字。不同的数字有不同的移位或其他东西。但从表面上看,最终的结果是一样的。