ホームページ > バックエンド開発 > C++ > なぜ `rand()` は C の標準以下の乱数生成器とみなされますか?

なぜ `rand()` は C の標準以下の乱数生成器とみなされますか?

Mary-Kate Olsen
リリース: 2024-12-21 00:33:09
オリジナル
620 人が閲覧しました

Why is `rand()` Considered a Substandard Random Number Generator in C?

rand() の使用はなぜ悪いと考えられているのですか?

rand() はよく見かける擬似乱数生成器ですが、その使用法は次のとおりです。 srand() でシードを設定するオプションがあるにもかかわらず、一般的には推奨されません。代替ジェネレータを好むこの理由は、C ランダム ライブラリの制限と欠点に関連するいくつかの理由から生じています。

擬似乱数生成の制限

Rand は擬似乱数ジェネレータです。つまり、その出力は初期シードに依存します。その結果、特定のシードに対して同じ一連の数値が生成されるため、真のランダム性を必要とするセキュリティに敏感なアプリケーションには適していません。これは疑似乱数生成器の特性であり、rand に固有のものではありません。

C ランダム ライブラリの欠陥

rand と srand を含む C ランダム ライブラリは、その固有の制限を超えて、それを可能にする特定の問題を示しているobsolete:

  • グローバル状態: ランダム ライブラリは、複数のランダム エンジンの同時使用を防ぎ、マルチスレッド操作を複雑にするグローバル状態を維持します。
  • Lackディストリビューション エンジンの: Rand は間隔 [0, RAND_MAX] 内の数値を生成しますが、ほとんどのシナリオでは特定の分布。別の分布に変換しようとすると、結果が不均一になることがよくあります。
  • 実装の品質: 他の回答で詳しく説明されているように、Rand の実装には既知の品質の問題があります。

C の代替案

モダン C は、<ランダム>の堅牢な代替手段を提供します。図書館。以下を提供します。

  • 複数のランダム エンジン: さまざまな乱数エンジンをサポートし、同時使用が可能です。
  • 配布サポート: 配布を提供します指定された間隔と分布内で数値を生成するエンジン。
  • 改善されました品質: <ランダム>ライブラリの実装が改善され、より高いレベルの品質が保証されます。

以上がなぜ `rand()` は C の標準以下の乱数生成器とみなされますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート