PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] white noise
楼主:
DJWS
(...)
2015-05-31 16:33:27
http://vellocet.com/dsp/noise/VRand.h
inline float white(float scale=0.5f)
{
m_seed = (m_seed * 196314165) + 907633515;
m_white = m_seed >> 9;
m_white |= 0x40000000;
return ((*(float*)&m_white)-3.0f)*scale;
};
想请教这段程式码在做什么?
我只知道第一行是在做 Linear Congruential Generator
作者:
suhorng
( )
2015-05-31 17:03:00
m_white --reinterpret_cast--> float; 对照 ieee 754 吧看起来是固定指数, 剩下 random 产生个 random float num
楼主:
DJWS
(...)
2015-05-31 20:05:00
http://www.h-schmidt.net/FloatConverter/IEEE754.html
勾一勾之后发现范围落在2~4之间 所以减3
作者:
LPH66
(-6.2598534e+18f)
2015-05-31 23:50:00
这其实就是我很久之前提过的直接取浮点数乱数的方法
#1FebL7RA
只是这里要的范围是 [-1,1) 所以指数固定为 +1那 bias 127 之后就变成 128 << 23 == 0x40000000这样就能产生 [2,4) 的均匀随机浮点数乱数 减 3 得 [-1,1)
作者:
Killercat
(杀人猫™)
2015-06-01 08:25:00
其实不用那么麻烦啊 boost.Random有几乎一样的实作他利用的是std::mt19937 有兴趣可以看一下
楼主:
DJWS
(...)
2015-06-01 09:49:00
@Killercat mt19937显然比较麻烦 为何你觉得简单?
http://goo.gl/cFgu8c
boost src comment提供的连结@LPH66 不过这段程式码有integer overflow如果mod某数 那么就不会是uniform distribution了....
作者:
Killercat
(杀人猫™)
2015-06-01 10:38:00
不是,我的意思是Boost::Random有利用mt19937的实作诶,也许他只能用C...那就当我没说了囧 刚才想到
作者:
Feis
(永远睡不着 @@)
2015-06-01 10:45:00
蛮有趣的. mod 某未定数之后还能 uniform dist 的怎样的性质
楼主:
DJWS
(...)
2015-06-01 14:36:00
@Feis 我是说他的LCG会溢位 他忘记mod即便他记得mod 也要看他mod什么 才可能是uniform
作者:
Feis
(永远睡不着 @@)
2015-06-01 14:53:00
@DJWS 不晓得您说的是哪个 LCG? 这篇文章的不是 mod 2^32 ?
楼主:
DJWS
(...)
2015-06-02 06:39:00
如果没有溢位 可以这样认为 / 如果已经溢位 是未定义行为此例当中 即便他记得补上mod 2^32 依然会溢位我搞错了 刚刚翻了规格书 发现unsigned int不会溢位如你所说是mod 2^32没错 谢谢
继续阅读
[问题] BCB TImage 储存到哪里去了?
noodleT
[问题] volatile能保证执行顺序吗?
kdjf
[问题] 输入档案的数字到阵列中
yoyo50420
[问题] C++ list merge
hardware
[问题] Segmentation fault (core dumped)
proud
[问题] 想写一个command,搜寻group内member
proud
[问题] free 之后
kroll
[问题] C++将资讯写入记事本问题!?
BIAO
[问题] RS485通讯排队的问题...
laertes
[问题] struct
gn00618777
Links
booklink
Contact Us: admin [ a t ] ucptt.com