2017-02-09 2 views
0

Windowsのバッチで乱数が必要です。ここに私のコマンドです:Windowsバッチでの乱数の均等分配

set /a "random_line=(%random%%%total)+1" 

これは私に乱数の均一な分布を与えるつもりされていますか?

EDIT:

私はすでにHow to use random in BATCH script?を見たい、とCherryDTの答えは私にも分布についての質問を作っ:これは均一に分布されないこと

注意を! 0~99 の例では、数値0~67は の数値68~99よりやや頻繁に発生します。これは、32767モジュロ100が67であり、0でないためです。 は一様分布でなければならないためです。 (この%random% %%100には 魔法の構文が、 %%だけでモジュロの略エスケープ%である1つのより少ないスペース、と実際に%random % %% 100ではありません。)

ので、明確にするためにこれは私の不均一な分布を与えるのだろうか?

+0

http://stackoverflow.com/a/5777608/1683264使用する[方法の – rojo

+0

可能な複製バッチスクリプトでランダム?](http://stackoverflow.com/questions/5777400/how-to-use-random-in-batch-script) – rojo

+0

あなたは尋ねました、***これは私に均等な分布を与えるつもりですか? ? "***また、***これは私に不均一な分布を与えるのだろうか? :) – abelenky

答えて

4

質問への回答:いいえ、あなたの計算はあなたに一様な分布を与えることはありません。

ロング答えは、あなたが達成したいものの想像力のビットで、

%random%はあなたに

を均一な分布を与えるだろうが、あなたのコードは、おそらくあなたがふり何をやっていません。

動的変数%RANDOM%は、0から32767までのランダムな整数を生成するためです。

あなたは1%total%の間で均一な整数分布にそれを変換したい場合は、この計算を必要とする

SET /a random_line=(%RANDOM%*%total%/32768)+1 
+0

%random%= 32767と%total%= 100としましょう。つまり、(32767 * 100/32768)+1 = 100.996948242です。このラウンドは101になるでしょうか?それは100を超えることはできませんので。 – grgoelyk

+0

私の自身の質問に答えました。それは常に丸めます。ありがとう。 – grgoelyk

+0

@grgoelykこれは整数の計算であり、丸めは行われずに切り捨てられます – LotPings

関連する問題