Add here a paragraph of the function description.
/* genint Scicos Random Integer Generator block * Type 4 simulation function ver 1.0 - scilab-3.0 * 3 janvier 2005 - IRCOM GROUP - Author : A.Layec */ /* REVISION HISTORY : * $Log$ */ #include "machine.h" #include <math.h> #include "scicos_block.h" /* Ce bloc est générateur de nombre entier aléatoire. Il peut générer des trains binaires * type RZ ou NRZ ou bien des nombres entiers de longueurs déterminées, signés ou non signés * * entrées régulières : néant * sorties régulières : sortie du générateur * entrée évènementielle : détermine la cadence de génération * * paramètres entiers : ipar[0..outsz[0]-1] : vecteur du nombre de bit du mot de sortie * ipar[outsz[0]..2*outsz[0]-1]: vecteur du type de générateur * * nb : Type 0: génére 1 seul bit codé NRZ * 1: génère 1 seul bit codé RZ, ou un mot non signé * 2: génère un mot codé code complément à 2 */ /* genintv_c routine de calcul de mots entiers aléatoires * * Entrées : * n : taille du vecteur de sortie (scalaire) * m : longueur des mots binaires des éléments du vecteur de sorties (vecteur) * typ : type des générateurs binaires (vecteur) * (typ=0: génére 1 seul bit codé NRZ * =1: génère 1 seul bit codé RZ, ou un mot non signé * =2: génère un mot codé code complément à 2) * Sorties : * y : vecteur de sortie * * dépendances * math.h */ void genintv_c(int *n,int *m,int *typ,double *y) { /*déclaration des variables compteurs*/ int k,i,j; for(i=0;i<(*n);i++) { switch (typ[i]) { /*Type 0 -> dédié signal NRZ*/ case 0: { y[i]=(int)((rand()&1)*2-1); break; } /*Type 1 -> entier non signé*/ case 1 : { k=1; k=k<<m[i]; j=rand(); y[i]=(j&(k-1)); break; } /*Type 2 -> entier code complémént à 2*/ case 2 : { j=rand(); j -= 2<<(m[i]-2); j &= (2<<(m[i]-1)) - 1; j -= 2<<(m[i]-2); y[i]=j; break; } break; } } return; } /*prototype*/ void genint(scicos_block *block,int flag) { /*Déclaration des variables*/ double *y; int i,j,k; int ny; /*Récupération de l'adresse du port de sortie régulier*/ y=(double *)block->outptr[0]; /*Récupération de la taille du vecteur de sortie*/ ny=block->outsz[0]; /*Le flag 1 recopie le vecteur Z dans le vecteur Y*/ if (flag==1||flag==6) { k=1; F2C(dcopy)(&ny,&block->z[0],&k,&y[0],&k); } /*Le flag 2 calcul les valeurs ou mots binaires dans Z*/ else if(flag==2||flag==4) { /*Appel binv_c*/ genintv_c(&ny,&block->ipar[0],&block->ipar[ny],&block->z[0]); } }