Page 1 sur 1
Fonction calcul Aleatoire sur TIA Portal
Posté : 18 avr. 2016, 00:06
par Yacub
Bonjour,
Je souhaiterai faire une fonction qui permets de renvoyer une valeur comprise entre 0 et 20 .
Malheureusement la fonction Maths.Random() ( qui renvoi une valeur comprise entre 0 et 1 ) n'existe pas .
Quelqu'un a une idée ?
Re: Fonction calcul Aleatoire sur TIA Portal
Posté : 18 avr. 2016, 08:28
par Cyril93
Salut,
On en parle dans ce topic,
viewtopic.php?f=15&t=620
Re: Fonction calcul Aleatoire sur TIA Portal
Posté : 18 avr. 2016, 13:05
par Yacub
Cyril93
Niquel merci !!!!!!!!!!!!!!!!!!!!!
Re: Fonction calcul Aleatoire sur TIA Portal
Posté : 18 avr. 2016, 21:37
par Yacub
Cyril93,
J'ai un soucis ça ne fonctionne pas et je ne comprends pas pourquoi
Comme tu peux le voir sur l'imprEcran, j'ai utilisé un bit de cadence pour incrementé la variable "Increment"
deuxieme ligne je mets 0 dans l'integer "Increment" si "Increment" > 20
et deja la y a un soucis car j'ai beau avoir mis la variable a 0, dans le comparateur elle vaut toujours 1457 pourtant c'est la meme variable tu as une idée ?
Re: Fonction calcul Aleatoire sur TIA Portal
Posté : 18 avr. 2016, 21:52
par Ulairi
La lecture du programme se fait ligne par ligne et du haut vers le bas.
Donc la valeur de #increment prise au moment de la comparaison est la valeur courante du compteur (réseau 1). Comme la valeur courante du compteur n'est pas remise à zéro, celle-ci continue à s'incrémenter. C'est donc normal vu la façon dont c'est programmé.
Re: Fonction calcul Aleatoire sur TIA Portal
Posté : 18 avr. 2016, 22:38
par Yacub
Je ne comprends pas vraiment quel est la différence avec ce reseau ladder ?
Re: Fonction calcul Aleatoire sur TIA Portal
Posté : 18 avr. 2016, 22:39
par Yacub
J'ai reussi a resoudre mon probleme mais je ne comprends pas pourquoi la 1ere version est fausse
Re: Fonction calcul Aleatoire sur TIA Portal
Posté : 19 avr. 2016, 20:56
par Alex
Tu peut essayer de transcrire cette implémentation en SCL vu que tu es sur le TIA v13
https://en.wikipedia.org/wiki/Multiply-with-carry
Code : Tout sélectionner
uint32_t rand32(void)
{
uint32_t result = 0;
result = rand();
result <<= 16;
result |= rand();
return result;
}
// Init all engine parts with seed
void initCMWC(unsigned int seed)
{
srand(seed);
for (int i = 0; i < CMWC_CYCLE; i++) Q[i] = rand32();
do c = rand32(); while (c >= CMWC_C_MAX);
}
// CMWC engine
uint32_t randCMWC(void)
{
static uint32_t i = CMWC_CYCLE - 1;
uint64_t t = 0;
uint64_t a = 18782; // as Marsaglia recommends
uint32_t r = 0xfffffffe; // as Marsaglia recommends
uint32_t x = 0;
i = (i + 1) & (CMWC_CYCLE - 1);
t = a * Q[i] + c;
c = t >> 32;
x = t + c;
if (x < c)
{
x++;
c++;
}
return Q[i] = r - x;
}
int main()
{
unsigned int seed = time(NULL);
initCMWC(seed);
printf("Random CMWC: %u\n", randCMWC());
}
Re: Fonction calcul Aleatoire sur TIA Portal
Posté : 19 avr. 2016, 23:02
par Yacub
Alex,
ça a l'air un peux compliqué ton script, je vais tenter le coup quand même .