diff options
author | imushir | 2016-01-18 11:47:44 +0530 |
---|---|---|
committer | imushir | 2016-01-18 11:47:44 +0530 |
commit | c3cc6d1d15d8cf60a27f253205424adb9e498e6e (patch) | |
tree | 13a765be45b0daf44a48c1fdef423dbf01155970 /src/c/auxiliaryFunctions/rand/u8rands.c | |
parent | 7382a75d68141d72562f219a839543c9c6fc83aa (diff) | |
download | Scilab2C_fossee_old-c3cc6d1d15d8cf60a27f253205424adb9e498e6e.tar.gz Scilab2C_fossee_old-c3cc6d1d15d8cf60a27f253205424adb9e498e6e.tar.bz2 Scilab2C_fossee_old-c3cc6d1d15d8cf60a27f253205424adb9e498e6e.zip |
added support for uin8,uint16,int8,int16 and not in GeneratedSetup.sci,u8cmd_digital_outs.c,getAllInterfaces.sci,getAllHeaders.sci
Diffstat (limited to 'src/c/auxiliaryFunctions/rand/u8rands.c')
-rw-r--r-- | src/c/auxiliaryFunctions/rand/u8rands.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/c/auxiliaryFunctions/rand/u8rands.c b/src/c/auxiliaryFunctions/rand/u8rands.c new file mode 100644 index 0000000..bdf7f9a --- /dev/null +++ b/src/c/auxiliaryFunctions/rand/u8rands.c @@ -0,0 +1,68 @@ +/* Scilab2C FOSSEE IIT Bombay */ +#include "rand.h" +#include <stdio.h> + +double u8rands(void) +{ + +int m=1; +const int itwo=2; +static int m2=0,halfm=0,ia=0,ic=0,mic=0,iy=0; +static double s=0.0; +if(m2==0) +{ + /*if first entry,compute machine integer word length*/ + + while(m>m2) + { + + m2=m; + + m=itwo*m2; + + } + + halfm = m2; + /* compute multiplier and increment for linear congruential methos */ + ia = 8*(int)(halfm*atan(1.0)/8.0) + 5; + ic = 2*(int)(halfm*(0.5-sqrt(3.0)/6.0)) +1; + + mic = (m2 - ic) + m2; + + /* s is the scale factor for converting to floating point*/ + s = 0.5/halfm; + + +} + +/* compute next random number */ + iy = iy*ia; + +/* the following statement is for computers which do not allow interger overflow on addition*/ +if(iy > mic) +{ + iy = (iy - m2) - m2; + +} + iy = iy + ic; + + /* the following statement is for computers where the word length for addition is greater than for multiplication */ + if(iy/2 > m2) +{ + iy = (iy - m2) - m2; + +} + /* the following statement is for computers where integer overflow affects the sign bit */ + if(iy < 0) + { + iy = (iy + m2) + m2; + + } + + return (double)iy*s; + + + + + +} |