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