为什么RAND_MAX在Linux和Windows的同一台计算机上有所不同?

时间:2019-04-15 22:26:55

标签: c linux gcc random std

我试图使用rand()生成一些随机数,但由于要生成一些大数,因此我首先检查了RAND_MAX。在Windows 10中,printf("%x",RAND_MAX);给出了0x7fff,而在Linux 18.04上,printf("%x",RAND_MAX);得到了0x7ffffff 为什么当我在同一台计算机上将相同的编译器GCC与相同的库一起使用时,最大范围发生变化? 有没有办法在Windows上配置我的IDE(代码块)或编译器以使其与Linux上的大小相同?

1 个答案:

答案 0 :(得分:2)

它不是相同的库。 Linux通过大多数Linux程序使用的公用 "methodId": { "className": "InvokerParser", "filePath": "org/foo/commons/functors/InvokerParserformer.java", "methodName": "parser" } (通常为rand)提供libc。 Windows提供了一个不同的“通用” C运行时,许多编译器和工具都捆绑了自己的版本。

glibc is pretty Linux specific;您可以始终遵循Linux约定编写自己的glibc / srand / rand替换库,但不能只使用未修改的Linux。

如果您想要可移植的代码,建议您切换到C ++并使用具有明确定义的可移植语义的C ++ 11 RAND_MAX API。 <random>是一个糟糕的PRNG,努力使其可移植并不能解决问题。