random(3)

2014. 05. 29
BSDライブラリ関数マニュアル RANDOM(3)


●名前

initstaterandomsetstatesrandomsrandomdev
より良い乱数ジェネレータ、およびジェネレータを変更するためのルーチン


●ライブラリ

標準Cライブラリ(libc、-lc)


●書式

#include <stdlib.h>

char *
initstate(unsigned seed, char *state, size_t size);

long
random(void);

char *
setstate(const char *state);

void
srandom(unsigned seed);

void
srandomdev(void);


解説

random()関数は非線形加法フィードバックを使用した乱数ジェネレータで、デフォルトでサイズが31のlong整数のテーブルを採用しています。
これは 0 〜 231 - 1 の範囲の連続した擬似乱数を返します。
この乱数ジェネレータの周期は非常に長く、約 16 x (231 - 1) です。

random()やsrandom()関数は、rand(3)srand(3)関数と(ほとんど)同じ呼び出しシーケンスと初期化プロパティを持っています。
違いはrand(3)の乱数列はかなり少なく、実際にはrandによって生成される下位ビットが周期的なパターンになっている点です。
random()によって生成されたものは全てのビットが使用可能です。
例えば「random()&01」ではランダムなバイナリ値が生成されます。

rand(3)と同様に、random()はシードを「1」としてsrandom()を呼び出すことによって再現することができる数列をデフォルトで生成します。

srandomdev()ルーチンは、暗号化の利用に適した良好な乱数を返すrandom(4)乱数デバイスを使用して、状態配列を初期化します。
この特定のシーディング手順では、状態バッファ内の後続する項は決められたシードに適用されているLCアルゴリズムからは取得できないので、任意の値でsrandom()を呼び出すことによって再現することが不可能な状態を生成することに注意してください。

initstate()ルーチンは、引数として渡された状態配列を後に使用するために初期化します。
initstate()で使用される状態配列の(バイト単位の)サイズは、乱数ジェネレータを使用する際に必要となる複雑さを決定するもので、状態が大きい程より良い乱数になります。
(現在、状態情報の量に"最適な"値は8、32、64、128、そして256バイトで、それ以外の量は最も近い既知の量に切り下げられます。8バイト未満の場合はエラーになります。)
(乱数シーケンスの開始点を指定し、同じ点から再開するための)初期化用のシードも引数です。
initstate()関数は、以前の状態情報配列へのポインタを返します。

状態が初期化されると、setstate()ルーチンは状態間の高速切替を提供します。
setstate()関数は以前の状態配列へのポインタを返し、その引数の状態配列は次にinitstate()またはsetstate()を呼び出すまで更なる乱数の生成に使用されます。

状態配列が初期化されると、(希望するシードや状態配列、サイズを伴う)initstate()を呼び出すか、または(状態配列を伴う)setstate()と(希望するシードを伴う)srandom()の両方を呼び出すことによって、異なる時点から再開することが出来ます。
setstate()とsrandom()の両方を呼び出すことの利点は、状態配列のサイズを初期化した後で記憶する必要が無いことです。

状態情報を256バイトにすると、乱数ジェネレータの周期は269より大きく、ほとんどの目的に充足します。


●作者

Earl T. Cohen


●診断

initstate()を8バイト未満の状態情報で呼び出した場合、またはsetstate()が誤った状態情報を検出した場合は、標準エラー出力にエラーメッセージを出力します。


●旧書式

#include <stdlib.h>

char *
initstate(unsigned long seed, char *state, long size);

char *
setstate(char *state);

void
srandom(unsigned long seed);

各パラメータの型は旧来のバージョンでは異なります。


●関連項目

arc4random(3)rand(3)srand(3)、random(4)、compat(5)


●歴史

これらの関数は4.2BSDで登場しました。


●バグ

処理速度はrand(3)の約2/3です。

旧来の実装は非常に脆弱なシーディングを使用していたため、ランダムシーケンスはシードであまり変化しませんでした。
現在の実装は初期状態の計算に、より良い擬似乱数ジェネレータを採用しています。

暗号化品質にランダム性を必要とするアプリケーションには、arc4random(3)を使用してください。


BSD 1993年6月4日



参考文献

Mac OS X Manual Page/random(3)

JMan/FreeBSDドキュメント/random(3)

0 CommentsPosted in 資料





SoundLink Mini Bluetooth speaker_ii_limited
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
05 | 2017/06 | 07
Sun Mon Tue Wed Thu Fri Sat
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

SoundLink Mini Bluetooth speaker_ii_limited
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR