x******a 发帖数: 6336 | 1 我要生成1m的随机数,用什么seed比较好?
谢谢 |
t******i 发帖数: 2688 | 2 什么样的随机数? binary,还是uniform,还是搞死? |
x******a 发帖数: 6336 | 3 exponential,beta 和gaussian/student t
我现在在C++里用time(0),每一个loop生成4k上面三种分布,
大概需要200-500k个loop。这样是不是每个loop的相关了?
多谢.
【在 t******i 的大作中提到】 : 什么样的随机数? binary,还是uniform,还是搞死?
|
t*****n 发帖数: 4908 | 4 我不是很懂。但是你不必自己造轮子吧。gsl和boost都有。
【在 x******a 的大作中提到】 : exponential,beta 和gaussian/student t : 我现在在C++里用time(0),每一个loop生成4k上面三种分布, : 大概需要200-500k个loop。这样是不是每个loop的相关了? : 多谢.
|
x******a 发帖数: 6336 | 5 我用boost,我就想知道次数太多会不会导致随机性下降,相关性变大?
谢谢
【在 t*****n 的大作中提到】 : 我不是很懂。但是你不必自己造轮子吧。gsl和boost都有。
|
c*********e 发帖数: 16335 | 6 en.到stackoverflow上search一下,就有答案了。别自己造。
【在 t*****n 的大作中提到】 : 我不是很懂。但是你不必自己造轮子吧。gsl和boost都有。
|
O*******d 发帖数: 20343 | 7 如果需要真正的随机数,最好的办法是用硬件的发生器。 网上有卖的,USB 接口, 因
为是用电子电路的热涨落来产生随机数,所以产生速度有限制,大概每秒1万个随机的
比特。
【在 x******a 的大作中提到】 : 我要生成1m的随机数,用什么seed比较好? : 谢谢
|
l*y 发帖数: 21010 | 8 硬件的好像也不是真正的随机
【在 O*******d 的大作中提到】 : 如果需要真正的随机数,最好的办法是用硬件的发生器。 网上有卖的,USB 接口, 因 : 为是用电子电路的热涨落来产生随机数,所以产生速度有限制,大概每秒1万个随机的 : 比特。
|
l*******m 发帖数: 1096 | 9 1million 小case. 你不放心,可以run autocorrelation 看看peaks
【在 x******a 的大作中提到】 : 我用boost,我就想知道次数太多会不会导致随机性下降,相关性变大? : 谢谢
|
O*******d 发帖数: 20343 | 10 热涨落是真正的随机。 但是热涨落噪音的频率有限,所以用硬件产生随机数,bit
rate不能太高,否则两个bit的产生会落在同一个涨落中,就不是随机的了。 硬件随机
数的好处之一就是不需要seed,过程是不可重复的。 加密用的key,要求高时,要用硬
件随机数。
【在 l*y 的大作中提到】 : 硬件的好像也不是真正的随机
|
|
|
x******a 发帖数: 6336 | 11 多谢,更正一下,是大概1-3billion。
6k/loop * 200~500k loops
【在 l*******m 的大作中提到】 : 1million 小case. 你不放心,可以run autocorrelation 看看peaks
|
d****i 发帖数: 4809 | 12 热噪声一般认为是真正的随机的,数字电路产生的都是伪随机的。
【在 l*y 的大作中提到】 : 硬件的好像也不是真正的随机
|
l*******m 发帖数: 1096 | 13 最好先估计一下project是不是很对随机数质量sensitive。不要overdesign.
【在 x******a 的大作中提到】 : 多谢,更正一下,是大概1-3billion。 : 6k/loop * 200~500k loops
|
x******a 发帖数: 6336 | 14 谢谢,例如,我要simulate一个portfolio的var,
这个portfolio有1000-6000positions,
对每个position,要simulate一个random number,计算it的pal
然后所有pnl的和作为这个portfolio的pnl,
我simulate 100000次,记下来每次的pnl,会得到一个pnl的分布,然后取1%的
quantile。
我用time(0)做seed, 发现下面两种写法,Myrandom randn的位置不同导致结果有20%
以上的差异。
1.
vector PnL;
Myrandom randn;
for(i=0; i
double sum=0;
.......
for(j=0; j
.....
getpnl();
sum+=getpnl;
}
PnL.pushback(sum);
}
sort(PnL.begin(), PnL.end());
cout<
2.
for(i=0; i
Myrandom randn;
double sum=0;
......
for(j=0; j
....
getpnl();
sum+=getpnl();
}
}
sort(PnL.begin(), PnL.end());
cout<
class MyRandom
{
private:
// Types
typedef boost::mt19937 Engine;
typedef boost::normal_distribution<> Distribution;
typedef variate_generator Generator;
// To hold the generator
Generator* _gen;
public:
MyRandom( int seed, float minVal, float maxVal )
{
_gen = new Generator( Engine( seed ), Distribution( minVal, maxVal )
);
}
~MyRandom()
{
delete _gen;
}
float next()
{
return (*_gen)();
}
};
【在 l*******m 的大作中提到】 : 最好先估计一下project是不是很对随机数质量sensitive。不要overdesign.
|
m****s 发帖数: 1481 | 15 难道不是找一个周期比较大的随机数产生器然后随便选个seed就行了么,numerical
recepie上面我记得有个2^53的,大概10^16了,比你需要的billion高出好多个量级了
,应该足够用了吧。实在不行,再拿一个小随机数生成器和这个两个结合起来应该够了
吧 |