различные результаты rand() в Windows и Linux

Я заметил, что стандартная функция RAND() дает разные результаты в Windows и Linux. Конечно, я использовал тот же номер семени (1234). Вот несколько первых результатов:

WIN: 4068 213 12761 8758

Лин: 479142414 465566339 961126155 1057886067

мое приложение требует, чтобы обе платформы дают одинаковый выход. Какие у меня варианты? Есть ли хорошая замена для rand (), которая соответствует моему требованию ?

спасибо

PS. Я использовал MSVC 2008 на Windows7 и gcc 4.1.2 на CentOS 5.5

6 ответов


Boost имеет широкий диапазон RNGs, предположительно с воспроизводимым поведением на разных платформах.


  • написать свой собственный (не рекомендуется).
  • использовать библиотеку. например,Boost
  • эта функция

Если вы довольны стандартом rand реализация и только требуют reproduceability, вы можете легко написать свой собственный линейный конгруэнтный генератор (адаптация интерфейса C, вероятно, не является хорошим выбором! - вместо этого используйте класс):

namespace myown {

static int state;

void srand(int seed) {
    state = seed;
}

int rand() {
    int const a = 1103515245;
    int const c = 12345;
    state = a * state + c;
    return (state >> 16) & 0x7FFF;
}

}

Это использует константы (ANSI C: Watcom) из статьи Википедии.

тем не менее, я бы предпочел пойти с прочитанной реализацией из Boost, как это было предложено другими.


вы не получите одинаковые результаты из-за различной реализации функций на любой платформе.


Я думаю, вы даже найдете разные версии linux, возвращающие разные значения, а также разные версии windows, возвращающие разные значения.

вы можете объединить свой случайный генератор, используя, например, glibc one.

другой вариант для вас-написать свою собственную функцию но сделать только если вы на 100% уверены, что вам не нужно использовать random для криптографического использования или любого другого использования, которое требует, чтобы вещь непредсказуемость или uniformness или иначе randomish свойства.


вы можете попробовать srand (int), который генерирует случайное число на основе seed (input)

-- Ура!--1-->