首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

windows 停的随机数太扯淡了

2013-10-11 
windows 下的随机数太扯淡了stdlib.h/* Maximum value that can be returned by the rand function. */#de

windows 下的随机数太扯淡了
stdlib.h
/* Maximum value that can be returned by the rand function. */

#define RAND_MAX 0x7fff  //才3万多点


看看linux的

/* The largest number rand will return (same as INT_MAX).  */
#define RAND_MAX        2147483647

这才靠谱啊
[解决办法]
32位
Window下的RAND_MAX为:0x7fff=2^15-1
Linxu下的RAND_MAX为 :2^31-1  
[解决办法]

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
unsigned long ulrand(void) {
    return (
     (((unsigned long)rand()<<24)&0xFF000000ul)
    
[解决办法]
(((unsigned long)rand()<<12)&0x00FFF000ul)
    
[解决办法]
(((unsigned long)rand()    )&0x00000FFFul));
}
unsigned __int64 ullrand(void) {
    return (
     (((unsigned __int64)ulrand())<<32)
    
[解决办法]
 ((unsigned __int64)ulrand()));
}
int i;
unsigned long ul;
unsigned __int64 ull;
void main() {
    srand(time(NULL));
    for (i=0;i<10;i++) {
        ul=ulrand();
        printf("%010lu 0x%08x\n",ul,ul);
    }
    for (i=0;i<10;i++) {
        ull=ullrand();
        printf("%020I64u 0x%016I64x\n",ull,ull);
    }
}
//3971076432 0xecb1d150
//2433428051 0x910b2a53
//1415415336 0x545d8628
//1312330759 0x4e389407
//1845758378 0x6e0409aa
//0008069933 0x007b232d
//4202720757 0xfa806df5
//2669855255 0x9f22c217
//0312068736 0x1299ca80
//2084555989 0x7c3fccd5
//03502077880857307931 0x3099e1472040ab1b
//16884702393146816355 0xea52835e19b43763
//01877364819396611730 0x1a0dbd5b45f34e92
//07839440151924835771 0x6ccb4948756a05bb
//09471412086917299176 0x8371371c820bfbe8
//04411255971577469925 0x3d37edef2f321be5
//13735846279546091130 0xbe9f876a65b7367a
//04512980766520059820 0x3ea15418aa9927ac
//15821377118299441610 0xdb90d2a9f1bb49ca
//15512417228822200185 0xd7472d480398bf79


[解决办法]
都是伪随机数,能差到那去呢,也就是linux生成一个随机数,windows要生成2个拼接一下而已,效率差点,就这么点区别。。。
[解决办法]
引用:
Quote: 引用:

都是伪随机数,能差到那去呢,也就是linux生成一个随机数,windows要生成2个拼接一下而已,效率差点,就这么点区别。。。


very正解,就是这么解决。主要是要没注意到这个问题就傻帽了,数组有10万数据,要没注意这个问题3万开外的数据全取不到

(rand()*RAND_MAX+rand())% nsize
这个错了吧,你或许想写(RAND_MAX+1)?

热点排行