一定範囲内の乱数を返すメソッド
日付 | 2009/08/21 |
---|---|
ID | 75874 (英語原文参照) |
バージョン | 11.4 |
プラットフォーム | Mac & Win |
4Dには乱数を生成する関数が備わっていますが、これをラッパーメソッドで強化することにより、生成される乱数に値の範囲を設けることができます。
下記のメソッドは、渡された範囲内の乱数(整数)を返すメソッドの例です。メソッドには、範囲の上限と下限を渡して下さい。同一の値が渡された場合、メソッドは0からMAXINTの範囲で乱数を返します。
`UTIL_Random ($Min_L;$Max_L) -> LONGINT C_LONGINT($0;$Rand_L) C_LONGINT($Min_L;$1) C_LONGINT($Max_L;$2) `-------------------------------------------------------------------------------- C_BOOLEAN(×RandomWarmed_b) `-------------------------------------------------------------------------------- C_LONGINT($Ndx;$Jdx;$Kdx;$SOA;$RIS) `====================== Initialize and Setup ================================ $Min_L:=$1 $Max_L:=$2 `// For speed purposes this is only done once If (Not(×RandomWarmed_b)) $RIS:=(Milliseconds%(32768-10+1))+10 For ($Ndx;1;$RIS) $SOA:=Random End for End if `======================== Method Actions ================================== If ($Max_L<$Min_L) $Ndx:=$Max_L $Max_L:=$Min_L $Min_L:=$Ndx End if If ($Max_L>MAXINT ) $Max_L:=MAXINT End if If ($Min_L=$Max_L) $Jdx:=0 $Kdx:=MAXINT -1 $Ndx:=$Kdx-$Jdx $Rand_L:=$Jdx+(Int(((Random/32768)*$Ndx)+1)) $Rand_L:=$Rand_L/MAXINT Else $Jdx:=$Min_L-1 If ($Max_L=MAXINT ) $Max_L:=$Max_L-1 End if $Kdx:=$Max_L $Ndx:=$Kdx-$Jdx $Rand_L:=$Jdx+(Int(((Random/32768)*$Ndx)+1)) End if `======================== Clean up and Exit ================================= $0:=$Rand_L