Open1

rnd

四ツ山伊吹四ツ山伊吹

記号の導入と制約

評価するたびに値が一意に定まらない対象を記号 \mathrm{rnd} であらわす。この \mathrm{rnd} については、以下の性質を持つ:

  • \mathrm{rnd} は非負整数で、その取りうる値の範囲は \mathrm{rnd_{min}} 以上、かつ \mathrm{rnd_{max}} 以下である。\iff \mathrm{rnd} = \left \{ r \mid r \in \left \{ 0, 1, 2, \dots \right \}\ \text{and}\ \mathrm{rnd_{min}} \le r \le \mathrm{rnd_{max}} \right \}.
    • ただし、\mathrm{rnd_{min}} \ll \mathrm{rnd_{max}}
  • \mathrm{rnd} は“seed”を引数にとる函数であるかもしれない。\iff \mathrm{rnd} := \mathrm{rnd}\left(\mathrm{seed}\right)

求めたい乱数値を記号 x であらわす。この x については、以下を満たすものとする:

  • x は非負整数である。\iff x \in \left\{0, 1, 2, \dots \right\}.
  • さらに、ある2つの数 a, b を用いて、x が取りうる値の範囲は a 以上 b 以下と限定される。\iff \exists a, \exists b; \quad a \le x \le b.
    • ただし、a, b \in \left\{0, 1, 2, \dots \right\} であり、常に a \lt b
  • x\mathrm{rnd} の函数である。\iff x := x\left(\mathrm{rand}\right)

\mathbb{Z}^{+}_{0} = \left\{0, 1, 2, \dots \right\}

x = x\left(\mathrm{rand}\right) = \left \lfloor \frac{\mathrm{rnd} \cdot (b - a + 1)}{\mathrm{rnd_{max}} + 1} \right \rfloor + a

\left [ \mathrm{rnd_{min}}, \alpha_1 \right )
\left [ \alpha_1, \alpha_2 \right )
\left [ \alpha_2, \alpha_3 \right )
\vdots
\left [ \alpha_{n - 1}, \alpha_{n} \right )

補遺: プログラミング言語の端数処理

床函数 \mathrm{floor} はうんぬん
\mathrm{floor}\colon \mathbb{R} \to \mathbb{Z} \lfloor x \rfloor := \max\{n \in \mathbb{Z} \mid n \leq x\}

Bashの算術式展開では暗黙のうちに最後には0への丸め処理(小数点以下の切り捨て)が行われる。

$ echo $((1.2)) # ⇒エラー
-bash: 1.2: syntax error: invalid arithmetic operator (error token is ".2")

$ echo $((6/5)) # ⇒1.2