在gcc實現中,這個工作很平常;該參數僅適用於as simple multiply and shift of the actual algorithm's output。但我可以想象其他算法在這種特殊情況下會遇到問題。我應該更好地建立在外部安全防護裝置,或者是罰款只是給std::normal_distribution
的構造0爲標準差的參數,以獲得一個‘非隨機分佈’,即一個始終得到的平均值?`std :: normal_distribution`保證與標準偏差0一致嗎?
(性能除外)
在gcc實現中,這個工作很平常;該參數僅適用於as simple multiply and shift of the actual algorithm's output。但我可以想象其他算法在這種特殊情況下會遇到問題。我應該更好地建立在外部安全防護裝置,或者是罰款只是給std::normal_distribution
的構造0爲標準差的參數,以獲得一個‘非隨機分佈’,即一個始終得到的平均值?`std :: normal_distribution`保證與標準偏差0一致嗎?
(性能除外)
的標準說下述(§26.5.8.4.4):
explicit normal_distribution(RealType mean = 0.0, RealType stddev = 1.0);
Requires: 0 < stddev.
作爲0
這樣的標準偏差被明確地由標準禁止,因此不能保證工作。因此,構建外部安全似乎是一個好主意
即使典型的實現可以在標準派生0(不確定是否是這種情況)上工作,我可以想象一個實現來測試這種情況並拋出標準派生爲零時發生異常,如果不是,則拋出異常(以確保代碼是可移植的)。作爲替代方案,代碼可能會被標準推導所分割,這在推導0
時也會產生問題。
是否有我們可以找到標準的地方? – 2012-02-08 04:34:52
@ user908821:ISO委員會出售它們,您可能會從您的國家機構獲得較低的價格。否則,大多數人應該對先前的草案感到滿意,如[n3242](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf)或下一稿[ n3337](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf)(此鏈接似乎不起作用) – 2012-02-08 09:41:59
不能使用0的標準差從標準,部分26.5.8.5.1:
explicit normal_distribution(RealType mean = 0.0, RealType stddev = 1.0);
Requires: 0 < stddev.
使用0值會導致不確定行爲,所以你需要特殊的價值。
正如前面作家指出的那樣,normal_distribution函數的行爲只是爲了STDDEV> 0定義。
我只是想添加,本發明使得有很大的意義數學:對於STDDEV(寬度)= 0高斯正態分佈變爲狄拉克δ函數。
的狄拉克δ函數被定義爲== 0到處除了對於x == 0,它是未定義的。然而,每一個積分在包括其積分限內X == 0定義的delta函數爲1,而一個組成不包括X == 0是0
此行爲不能被正確的定義範圍內表示float/double數字,因此stddev = 0的正態分佈必須保持未定義。
嗯。浮點數實際上只是實數的一個有限子集,所以PDF實際上是有限多個狄拉克峯的疊加,而不是proper上的適當函數。通過選擇σ= 0,我們只是簡單地將分佈限制在其中的一個,而不是像其他情況那樣約2²。所以我會說,行爲_can_可以代表。但後來我是物理學家,我們一直假裝狄拉克分佈是一個行爲良好的函數; _usually_沒有什麼戲劇性的出現...... – leftaroundabout 2012-02-08 16:46:27
好吧,我自己是物理學家,所以基本上我同意。不過這應該是程序員應該在特定的代碼段中自己決定的事情,所以我認爲將它定義在標準中是一件好事。 – Piotr99 2012-02-08 16:53:09
那麼那麼PDF就是t→δ(t-μ)。因此,如果X是分佈上的一個隨機變量,那麼X =μ幾乎可以肯定。在σ= 0的情況下分配合理的行爲當然是可能的。 – Managu 2012-05-06 20:51:20
也許這個問題可以用多一點的背景故事。爲什麼它不會好起來? – 2012-02-08 01:01:56
@LightnessRacesinOrbit:我想,如果執行次數除以標準偏差。 – 2012-02-08 01:06:42
我喜歡你如何在一個只能產生一個值的RNG問題上提及性能。 :D – 2012-02-08 01:08:09