CF2.5 の乱数


preview04a3

新しく追加された擬似乱数生成機能では範囲指定ができる

仕様とかまとめ

乱数発生器は MMF2 の仕様を引き継いでいるため従来から使われていた乱数に機能的な拡張は加えられていない。MMF2 の乱数は C、または C++ 標準ライブラリの仕様と一致しており 0 から RAND_MAX までの値( 通常 32767 だが MMF2 では拡張された範囲 65534 まで )を返す。

参考:Random:擬似乱数を生成する

「 random (数値)」で得られる最小値は 0、例えば「 random( 4 ) 」とした場合には、「 0, 1, 2, 3 」の四つの数字のうちどれかが返ってくる。だから random(0) と random(1) は必ず「 0 」が返ってくるのは仕様。

CF2.5 では従来からの乱数発生器 (Random) に加えて予め範囲指定ができる RRandom( , ) が実装された。これを使うと範囲指定にマイナス値も指定可能なので、数値型が「 unsigned int (最小値は 0)」から拡張されて「 signed int (最小値は -32767、最大値は +32767) 」になっているのが主な変更点だと分かる。「 signed int 」が表現できる最小値〜最大値内で擬似乱数値を取得できる。

  • 範囲指定してもそのままだと少数は得られない
  • 型の最大値を超える値を指定した場合には、マイナスになって返ってくる

整数型の表現範囲が有限なのは CF2.5 の仕様ではなくデータ型の仕様ではあるが、旧製品との互換性を維持するためには「 long double 」のような浮動小数点型にすることが出来なかったのは CF2.5 の仕様なのだと思う。

サイコロを作りたい場合は、これら仕様を踏まえて MMF2 流の作法と CF2.5 の作法、二つの作法で記述できる。

  • 1 + Random(6)

  • RRandom(1,7)

ダウンロード:Random_test_cf2.5

HTML5 出力:別窓で開く

R キーを押すとサイコロを振り直します




Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です