White Dragon
New member
What do you think about my random generator?
This is becouse rand() isnt a true random generator...
Post yours!!
This is becouse rand() isnt a true random generator...
Code:
int get_rand_seed() {
int seed = 0, tmp = 0;
char rf = "";
seed = ov("ticks")&rand();
tmp = seed;
seed = seed << 16;
tmp = tmp >> 16;
if ( getentity(0) != NULL() ) {
rf = getentity(0)+"";
rf = substr(rf,1,strlength(rf)-1);
rf = to_float(rf);
seed /= ov("elapsed_time");
tmp = tmp | rf;
} else {
seed /= ov("elapsed_time");
}
seed = seed | rand();
seed = (seed & tmp) | ((!seed) & rf);
return seed;
}
char substr(char str, int start_index, int length) {
if ( start_index+length > strlength(str) ) return NULL();
if ( start_index < 0 || strlength(str) <= 0 ) return NULL();
str = strright(str, start_index);
str = strleft(str, length);
return str;
}
char getchar(char str, int index) {
if ( index >= strlength(str) ) index = strlength(str)-1;
else if ( index < 0 ) index = 0;
if ( strlength(str) > 0 ) {
str = strright(str, index);
if ( strlength(str) > 1 ) {
index = 1;
str = strleft(str, index);
}
}
return str;
}
int searchstr_index(char txt, char pat, int reverse_flag) {
char tmp = "";
tmp = strinfirst(txt,pat);
if ( tmp == -1 ) return -1;
else return ( strlength(txt)-strlength(tmp) );
}
float to_float(char num) {
char str_decimal = "", str_mantix = "", str_digit = "", tmp = "";
int decimal = 0, sign = 1, sign_flag = 0;
float digit = 0;
int i = 0;
float float_num = 0, mantix = 0;
i = searchstr_index(num,".");
if ( i != -1 ) {
str_decimal = substr(num,0,i);
str_mantix = substr(num,i+1,strlength(num)-i-1);
} else {
str_decimal = num;
str_mantix = "";
}
tmp = getchar(str_decimal,0);
if ( tmp == "+" ) { sign = 1; sign_flag = 1; }
else if ( tmp == "-" ) { sign = -1; sign_flag = 1; }
if ( sign_flag ) str_decimal = substr(str_decimal,1,strlength(str_decimal)-1);
// get decimal part
for ( i = strlength(str_decimal)-1; i >= 0; --i ) {
str_digit = getchar(str_decimal,i);
if ( str_digit == "0" ) digit = 0;
else if ( str_digit == "1" ) digit = 1;
else if ( str_digit == "2" ) digit = 2;
else if ( str_digit == "3" ) digit = 3;
else if ( str_digit == "4" ) digit = 4;
else if ( str_digit == "5" ) digit = 5;
else if ( str_digit == "6" ) digit = 6;
else if ( str_digit == "7" ) digit = 7;
else if ( str_digit == "8" ) digit = 8;
else if ( str_digit == "9" ) digit = 9;
else continue;
digit *= exp(10,strlength(str_decimal)-1-i);
decimal += digit;
}
// get mantix part
for ( i = 0; i < strlength(str_mantix); ++i ) {
int div = 0;
str_digit = getchar(str_mantix,i);
if ( str_digit == "0" ) digit = 0;
else if ( str_digit == "1" ) digit = 1;
else if ( str_digit == "2" ) digit = 2;
else if ( str_digit == "3" ) digit = 3;
else if ( str_digit == "4" ) digit = 4;
else if ( str_digit == "5" ) digit = 5;
else if ( str_digit == "6" ) digit = 6;
else if ( str_digit == "7" ) digit = 7;
else if ( str_digit == "8" ) digit = 8;
else if ( str_digit == "9" ) digit = 9;
else continue;
div = exp(10,i+1);
digit = (digit*1.0)/div; // *1.0 to normalize to float
mantix += digit;
}
float_num = (sign*(decimal+mantix));
return float_num;
}
int exp(int base, int exp) {
int i = 0;
int result;
int sign = 1;
if ( base < 0 ) sign = -1;
base = abs(base);
exp = abs(exp);
result = base;
if ( exp == 0 ) return 1;
for ( i = 0; i < exp-1; ++i ) {
result *= base;
}
result *= sign;
return result;
}
float abs(float num) {
if (num < 0) num *= -1;
return num;
}
Post yours!!