Как использовать библиотеку случайных чисел Mersenne Twister в C?

Я хочу использовать одну из библиотек Mersenne Twister C (например, tinymt, mtwist или libbrahe), чтобы использовать ее в качестве начального числа дляrand() в программе на Си. Я не смог найти простой минималистичный пример того, как это сделать.

Я получил это далеко с пакетом mtwist, но благодаря комментариям pjs я понял, что это неправильный способ сделать это:

#include <stdio.h>
#include <stdlib.h>
#include "mtwist.h"

int main() {
    uint32_t random_value;

    random_value = mt_lrand();
    srand(random_value);
    printf("mtwist random: %d; rand: %d\n", random_value, rand());

    return 0;
}

(Первоначально я писал, что этот код не будет компилироваться, но благодаря ответу Карла Норума я смог его скомпилировать).

Может ли кто-нибудь дать мне простой пример того, как правильно генерировать случайные числа с любой библиотекой Mersenne Twister C?

2 ответа

Решение

Вот демонстрация того, как использовать mtwist реализация Mersenne Twister:

#include <stdio.h>
#include <stdlib.h>
#include "mtwist.h"

int main(void) {
   int i;
   mt_seed();
   for(i = 0; i < 10; ++i) {
      printf("%f\n", mt_ldrand());
   }
   return EXIT_SUCCESS;
}

Скомпилировано и работает следующим образом:

[pjs@amber:mtwist-1.4]$ gcc run-mtwist.c mtwist.c
[pjs@amber:mtwist-1.4]$ ./a.out
0.817330
0.510354
0.035416
0.625709
0.410711
0.980872
0.965528
0.444438
0.705342
0.368748
[pjs@amber:mtwist-1.4]$

Это не ошибка компилятора, это ошибка компоновщика. Вам не хватает подходящего -l флаг, чтобы связать библиотеку, которую вы используете. Ваш вызов компилятора должен выглядеть примерно так:

cc -o example example.c -lmtwist

Я просто быстро взглянул на страницу mtwist, на которую вы ссылались, и, похоже, она распространяется как источник, а не как библиотека. В этом случае добавление соответствующего файла реализации в командную строку должно работать:

cc -o example example.c mtwist.c

Но вы, вероятно, должны посмотреть на makeрешение на основе реальной библиотеки из кода mtwist.

Другие вопросы по тегам