Bonjour à tous,

Je suis dans le portage d'un projet C/C++ de Windows vers OS X. En de nombreux endroits j'utilise la fonction C standard rand(). Mon problème est que je m'aperçois qu'à partir du même seed, la séquence pseudo-aléatoire générée sous Mac est différente de celle générée sous Windows... Ce qui m'a très étonné, car je pensais que c'était supposé être stable et indépendant de la plateforme.

Le problème est qu'à certains endroits j'ai absolument besoin d'obtenir la même séquence à partir d'un seed connu.

Par exemple, en compilant ça (avec GCC dans les deux cas) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
 
int main ()
{
  srand (3);
  printf ("%d\n", rand()%100);
  printf ("%d\n", rand()%100);
  printf ("%d\n", rand()%100);
  printf ("%d\n", rand()%100);
  printf ("%d\n", rand()%100);
  printf ("%d\n", rand()%100);
  printf ("%d\n", rand()%100);
  printf ("%d\n", rand()%100);
  printf ("%d\n", rand()%100);
  printf ("%d\n", rand()%100);
  printf ("%d\n", rand()%100);
  return 0;
}
J'obtiens cette sortie sous Windows 7 x64 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
48
96
94
91
31
77
2
3
17
68
9
Et celle-ci sous OS X 10.8 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
21
47
25
27
43
16
32
40
75
33
73
Les séquences sont stables sous chaque OS (j'obtiens toujours la même séquence à partir du même seed), mais différentes d'un OS à l'autre ; ce que je pensais pas, n'ayant pas développé en cross-platform jusque-là.

Alors, est-ce le comportement normal ou pas ? Si non, quelle pourrait être la cause ? Si oui, comment faire pour être assuré de la même séquence partout (une lib ou classe spécialisée peut-être ; mais pas de lib généraliste genre Boost pour uniquement un RNG please) ?