SRC意見交換掲示板Mk2
(現在 過去ログ35 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■3605 / inTopicNo.1)  確率について
  
□投稿者/ 癒兎 -(2004/06/04(Fri) 19:05:43) [ID:9p6l4dpC]
    癒兎といいますが、意見したいのは確率についてです。シナリオをしていて攻撃命中率が96パーセントの武器で攻撃し、かわされたのですがこれを十数回ためし、すべてかわされてしまいまいた。100分の4の確率を十数回続くのはすごいことで、またパイロットの特殊能力シールドや切り払いなども数字上より高い確率で発動するのですが皆さんはこのようなことはありませんか?このことについて意見や指摘があれば書き込んでもらいたいのですが。
引用返信/返信 削除キー/
■3606 / inTopicNo.2)  Re[1]: 確率について
□投稿者/ 白川 -(2004/06/04(Fri) 19:18:19) [ID:eAFhASAL]
    どうも、白川です。

    どのシナリオでそのような状況になったのかは存じませんが、
    乱数系列非保存というオプションがシナリオ側で有効になっていない
    場合は、何度クイックロードしても戦闘の結果は変わりません。
    それはそのシナリオの仕様です。

    それでは。
引用返信/返信 削除キー/
■3607 / inTopicNo.3)  Re[2]: 確率について
□投稿者/ MR -(2004/06/05(Sat) 11:28:27) [ID:bAKkkf5Z]
    はじめまして、MRと申します。
    癒兎さんの場合、白川さんのおっしゃることが当てはまると思いますが、少し補足を。
    たとえ乱数系列を非保存にしていても、コンピューターは確率で何かを実行する時、基本的に「前回の結果は無視」します。(SRCのプログラムによってはどうか知りませんが)単純に一回づつ計算するわけです。
    「90パーセント2回も外しちゃったから、次あたり当てとくか」なんてコンピューターは考えないわけですね。よって、運が悪ければ99パーセントでも連続で外れるし、1パーセントでもいきなり当たるわけです。(両方ともSRWで経験しました)

    それでは。
引用返信/返信 削除キー/
■3608 / inTopicNo.4)  Re[3]: 確率について
□投稿者/ 癒兎 -(2004/06/05(Sat) 15:12:44) [ID:r32BheFU]
    わかりました。ご指摘ありがとうございます。シナリオの仕様の場合やそうでない場合でも起こりうることなのですね。胸の痞えがひとつとれました。またなにかあれば、書き込もう思います。それでは
解決済み!
引用返信/返信 削除キー/
■3750 / inTopicNo.5)  SRCの確率計算
□投稿者/ Unnamed -(2004/09/20(Mon) 07:53:54) [ID:juKRYPua]
    既に3ヶ月以上経っていますが、記録として書いておきます。

    確率から実際に結果を導くためには、ランダム値を求めなければなりません。
    SRCでは、Random関数を含めて恐らく線形合同法を用いてランダム値を算出しています。
    このアルゴリズムは現在では欠陥が多く確認されており、値の偏りはさほど珍しくありません。特に値を二次元座標として使用すると、格子状に位置が偏ります。広いマップでユニットを数十体ほどランダムに出現させてみると、その偏りがわかると思います。
    通常は目に見えた偏りはわからないかもしれませんが、改善法を取れば精度をより均一にすることが出来ます。

    以下は精度を改善したランダムコマンドです。ただしクイックセーブファイルのサイズが肥大化するので、精度がそれほど重要でない場合は使わない方が良いでしょう。

    ----

    #高精度ランダム用乱数プール作成
    *プロローグ:
    Set _hires_rand_pool
    Set _rand_pool_size
    _rand_pool_size = 256
    For i = 1 To _rand_pool_size
    _hires_rand_pool[i] = _MOD((Random(16777215) - 1) / (Random(16777215) - 1), 1)
    Next
    Exit

    #整数高精度ランダム[1, UpperBound]
    #WRandom(UpperBound)
    WRandom:
    Return (Int((Args(1) - 1) * RRandom()) + 1)

    #高精度ランダム[0, 1]
    #RRandom()
    RRandom:
    Local index = Random(_rand_pool_size)
    Local n = _hires_rand_pool[index]
    _hires_rand_pool[index] = _MOD((Random(16777215) - 1) / (Random(16777215) - 1), 1)
    Return n

    #剰余
    _MOD:
    Return (((Args(1) / Args(2)) - Int(Args(1) / Args(2))) * Args(2))


引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -