题
代码是
return min + static_cast<int>(static_cast<double>(max - min + 1.0) *
(number / (UINT_MAX + 1.0)));
number是通过rand_s得到的随机数。min 和 max 是整数,表示最小值和最大值(含)。
如果您提供的解决方案不使用 unsigned int 作为数字,还请解释如何使其随机。
请不要使用 rand() 提交解决方案。
解决方案
这 static_cast<double>
是多余的,因为“+1.0”无论如何都会导致升级加倍。
其他提示
在 C 语言的数值配方中:科学计算的艺术(William H.出版社,布莱恩·P.弗兰纳里,索尔 A.特乌科尔斯基,威廉·T.维特林;纽约:剑桥大学出版社,1992 年(第 2 版,第 16 页)277)),提出以下意见:
“如果您想在1到10之间生成一个随机整数,则应始终使用高阶位来做到这一点
j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
从来没有类似的东西
j = 1 + (rand() % 10);
(使用低阶位)。”
从 man 3 rand
怎么样 提升:随机
您可以使用 unsigned long long 而不是 double 进行算术运算,但前提是 ULONGLONG_MAX >= UINT_MAX*UINT_MAX,这可能是实现定义的。但如果您担心这一点,您会担心在 (max - min) 或 RAND_MAX 很大的情况下原始代码中可能会出现精度损失。
long long 是否实际上更快可能取决于您的平台的硬件浮动有多好。但可以说整数运算本质上比浮点运算更简单。
就像是
min + number % (max - min + 1)
检查最终情况
不隶属于 StackOverflow