File: multiply.h

package info (click to toggle)
sprng 2.0a-8
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd, wheezy
  • size: 3,080 kB
  • ctags: 2,062
  • sloc: ansic: 30,350; fortran: 1,618; makefile: 573; cpp: 58; sh: 5
file content (19 lines) | stat: -rw-r--r-- 845 bytes parent folder | download | duplicates (13)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifdef LONG64
#define mult_48_64(a,b,c)  c = (a*b); 

#define multiply(genptr) mult_48_64(genptr->seed,genptr->multiplier,genptr->seed); genptr->seed +=  genptr->prime; genptr->seed &= LSB48;

#else
#define mult_48_32(a,b,c)  c[0] = a[0]*b[0]; c[1] = a[1]*b[0]+a[0]*b[1];\
  c[2] = a[0]*b[2]+a[1]*b[1]+a[2]*b[0];\
  c[3] = a[3]*b[0]+a[2]*b[1]+a[1]*b[2]+a[0]*b[3]; 

#define multiply(genptr,m,s,res) s[3] = (unsigned int) genptr->seed[0] >> 12;\
    s[2] = genptr->seed[0] & 4095; s[1] = genptr->seed[1]  >> 12;\
    s[0] = genptr->seed[1] & 4095;\
    mult_48_32(m,s,res);\
    genptr->seed[1] = res[0] + ((res[1]&4095) << 12) + genptr->prime;\
    genptr->seed[0] = ( (unsigned int) genptr->seed[1] >> 24)\
      + res[2] + ((unsigned int) res[1] >> 12 ) + (res[3] << 12);\
    genptr->seed[1] &= 16777215; genptr->seed[0] &= 16777215;
#endif