Почему RAND_MAX отличается на той же машине в Linux от Windows? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытался сгенерировать несколько случайных чисел, используя rand(), но сначала я проверил RAND_MAX, так как хочу сделать несколько больших чисел. В Windows 10 printf("%x",RAND_MAX); дает 0x7fff, а в Linux 18.04 printf("%x",RAND_MAX); дает 0x7ffffff Почему максимальный диапазон изменяется, когда я использую один и тот же компилятор GCC с одинаковыми библиотеками на одном компьютере? Есть ли способ, которым я настраиваю свою IDE (блоки кода) или компилятор в Windows, чтобы получить тот же размер, что и в Linux?

1 Ответ

2 голосов
/ 16 апреля 2019

Это не те же библиотеки. Linux предоставляет rand через обычный libc (обычно glibc), используемый большинством программ Linux; Windows предоставляет другую «обычную» среду выполнения C, и многие компиляторы и инструменты связывают свою собственную версию.

glibc довольно специфично для Linux ; вы всегда можете написать свою собственную заменяющую библиотеку srand / rand / RAND_MAX, которая соответствует соглашениям Linux, но вы не можете просто использовать немодифицированный Linux.

Если вам нужен переносимый код, я бы предложил перейти на C ++ и использовать API C ++ 11 <random>, который имеет четко определенную переносимую семантику. rand ужасный PRNG, и работа над тем, чтобы сделать его портативным, никак не может исправить ужас.

...