タグ

開発と乱数に関するmohnoのブックマーク (9)

  • [0.0, 1.0) の乱数を得るための“本当の”方法

    レイトレ合宿9(*)のセミナー発表スライドです。 * https://sites.google.com/view/rtcamp9/home - 2023/09/08 “除算法2”追記。(@Reputelessさんありがとうございました)

    [0.0, 1.0) の乱数を得るための“本当の”方法
    mohno
    mohno 2023/09/04
    うわっ、めんどくさ。floatなんか使うな……とはいかないのかな、SIMDとかあるし。(現実に困ったんだろうけど)1.0が出てきて困るなら捨てる、で終わらせそう。
  • 【C】srand(time(NULL))をしても同じ乱数が生成される

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

    【C】srand(time(NULL))をしても同じ乱数が生成される
    mohno
    mohno 2022/01/07
    そもそもsrandの呼び出しは1回だけにしろ(←よくある初歩的なミスだが)、というのはさておき内部で7の倍数を使っているというのはちょっとな。/「0〜6の乱数を生成して6段階」←7段階だろ。
  • そのシャッフル、本当にシャッフルですか?何気ない落とし穴にハマった話 - BASEプロダクトチームブログ

    こんにちは、BASEのフロントエンドチームでエンジニアリングマネージャーをやっている松原(@simezi9)です。 私は最近ではマネージャーとしてコードを書くことよりもチームの編成や採用などをメインに業務を行っているのですが、 そんな中でチラっと書いたコードで見事に落とし穴にハマって失敗をしたのでその共有記事です まえがき BASEのフロントエンドチームは現在15名ほど(うち業務委託5名)で運営されています。 この人数は今後もどんどん増えていく予定なのですが、目下全社的にリモートワークになっている事情も手伝ってメンバー同士の関係性が希薄になってしまう懸念を持っていました。 BASEの中では常に複数のプロジェクトが走っているのですが、それぞれのプロジェクトフロントエンドエンジニアは2〜3名ずつ配置されています。 そんななかでアサインされた人同士がフロントエンドエンジニア同士であるにも関わら

    そのシャッフル、本当にシャッフルですか?何気ない落とし穴にハマった話 - BASEプロダクトチームブログ
    mohno
    mohno 2021/03/10
    いや、むしろ、こんなシャッフル思いつかないぞ。乱数なんてソートの前提(推移律)が成立しないじゃん。「フィッシャーイェーツのアルゴリズム」←定番だよね。
  • PHP の乱数実装がグダグダな話

    2022-07-19 これらの問題を解決する Random Extension 5.x 並びに Random Extension Improvement RFC が可決され、 master に merge されました。 PHP 8.2 より利用可能になります。 https://wiki.php.net/rfc/rng_extension https://wiki.php.net/rfc/random_extension_improvement https://github.com/php/php-src/commit/4d8dd8d258ff365b146bcadcb277ede8992706d0 2022-06-18 これらの問題を解決するため、 PHP 8.2 に対して Random Extension 5.x の RFC が作成され、投票が始まっています 2021-01-15 PHP

    PHP の乱数実装がグダグダな話
    mohno
    mohno 2020/12/14
    リバートする人の気持ちは分かる。そういうのは、他の名前で……と思ったら random_int というのがあるんだな。「どうすればいいのか」
  • 乱数について本気出して考えてみる|TechRacho by BPS株式会社

    プログラミングをやっていると、様々な乱数に出会います。乱数に関しては大勢の研究者が色々な研究結果を出しているため、種類も増え、いったいどれを使えばいいのかと悩む原因にもなります。 大勢が研究し利用している分野ですから、私以外でも大勢が乱数に関する記事を書いているため、あえて新しい記事を書く価値は高くないかもしれません。まあ、既に理解している人はここで記事を閉じるか、暇つぶし程度の感覚で読んでいただくと良いかと思います。 真乱数と疑似乱数 プログラミングの世界の中でいわゆる "乱数" として扱われることが多いのは擬似乱数です。疑似、と付くからには、これは実のところ乱数ではないと言えます。とは言え、擬似乱数を乱数でないと言ってしまうと話が終わってしまうので、疑似乱数を含む乱数を広義の乱数とします。この記事で扱うのは広義の乱数です。逆に、狭義の乱数、物の乱数は真乱数と言います。 物と言いまし

    乱数について本気出して考えてみる|TechRacho by BPS株式会社
    mohno
    mohno 2019/12/26
    モンテカルロ法って、乱数である意味がない場合もあるよなあ、と思ったら、一様な数値列を準乱数というのか。
  • Randomクラスの仕様が.NET Core 2.0で変わっていた話 - Qiita

    C#で乱数を取得するのによく使用するRandomクラスについての話です。 これまでのRandomクラス 試しに以下のコードを.NET Frameworkや.NET Core 1.x系、Monoで実行すると(タイミングにもよりますが)全部同じ値が出力されると思います。 for (var i = 0; i < 10; i ++) { Console.WriteLine(new Random().Next()); } これは結構有名な話でRandomクラスは引数なしのコンストラクタでインスタンス化すると、内部で使用する乱数を生成するためのシード値にEnvironment.TickCount(OSが起動してからの時間)を使用するので、ミリ秒未満でインスタンスが複数生成されると同一のシード値になって生成される乱数も同じになってしまうという現象です。 シングルスレッドで動くアプリケーションなら同時にR

    Randomクラスの仕様が.NET Core 2.0で変わっていた話 - Qiita
    mohno
    mohno 2018/01/26
    「Randomクラスは引数なしのコンストラクタでインスタンス化すると、内部で使用する乱数を生成するためのシード値にEnvironment.TickCountを使用する」←ああ、変えようとしてるんだったか、くらい忘れてる……
  • 十分大きな乱数をユニークな識別子として使うのがなぜ安全なのか|Rui Ueyama

    いろいろなソフトウェアで、大きいランダムな値をユニークな値とみなすということが行われている。例えばユニークな識別子としてよく使われるUUIDはただの122ビットの乱数だ。gitもSHA-1ハッシュ値が160ビットの乱数のように扱えることを期待して、それをユニークな識別子として使っていた。実際にはランダムな2つの値が同じになる確率はゼロではないのに、なぜこれが安全なやり方だと言えるのだろうか? それについてちょっと説明してみよう。 あるシステムが、乱数で生成された識別子の衝突のなさに依存しているとして、仮に衝突が発生した場合、相当悪い結果、例えば復旧不可能な形でデータベースが壊れてしまうとしよう。これはどれくらい危険なのだろうか? 数学の問題で、学校のクラスの中で同じ誕生日の人が1組以上いる可能性は思ったより高いという話を聞いたことがあると思う。あるランダムに生成された値が衝突する確率という

    十分大きな乱数をユニークな識別子として使うのがなぜ安全なのか|Rui Ueyama
    mohno
    mohno 2017/11/30
    そこを心配してる人ってどれくらいいるんだろう、という気はするけどね。「衝突の可能性を心配するのは天が落ちてくるのを替わりに心配したほうがマシ」←いや、普通にバグが起きる可能性を心配しろとw
  • totoBIGの件は何が問題なのか、なるべく分かりやすく説明してみる: 不倒城

    目次・記事一覧(1) レトロゲーム(185) 日記(772) 雑文(512) 書籍・漫画関連(56) 子育て・子どもたち観察(115) ゲームブック(12) フォルクローレ・ケーナ・演奏関連(86) FF14(40) レトロでもないゲーム(336) 始めたばっか(13) アナログゲームいろいろ(37) 人狼(48) ネットの話やブログ論(61) 三国志大戦(20) 無謀的世評(52) ゴーストライター(16) 大航海時代ONLINE(40) FF3(6) Civ4(18)

    mohno
    mohno 2017/02/21
    まあ、シードが一致しただけだよな。ヘボいとは思うが、イカサマはうがちすぎ。毎回シード変えろとか言ってる人、シードの意味がわかってるんかな。それにしても、よく一致してることに気付いたなと思う。
  • すごい乱数生成アルゴリズム「xorshift」 - Pashango’s Blog

    みなさん、こんにちは、今回は乱数の話です。 特に複数機種でのコンシューマ機でゲームを開発をしていると、機種間で乱数値を統一するために乱数生成アルゴリズムを自作しますよね。 そこでよく使われるアルゴリズムが「線形合同法」です、内容は至って簡単で、以下の漸化式を使います。 A,B,Mは定数で、どの値が入るかは処理系依存です。 例えばUnixなどの処理系ではA=1103515245,B=12345,M=2147483647などが入ります。 C言語ですと以下のようになります。 static unsigned int x=1; void srand(unsigned int s) { x=s; } unsigned int rand() { x=x*1103515245UL+12345UL; return x&2147483647UL; } この「線形合同法」は計算が簡単で高速ですから、いろいろな環

    すごい乱数生成アルゴリズム「xorshift」 - Pashango’s Blog
  • 1