ホームページ >バックエンド開発 >C++ >Apple の MCG で「rand() % 14」が限られた値を返すのはなぜですか?

Apple の MCG で「rand() % 14」が限られた値を返すのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-28 00:20:10612ブラウズ

Why Does `rand() % 14` Return Limited Values on Apple's MCG?

Rand() % 14 ジェネレーターが制限された値を返す

最近のプログラムで、開発者は rand() % 14 という問題に遭遇しました。式は常に 6 または 13 の値しか生成しませんでした。コードを複数回実行しようとしたにもかかわらず、結果は一貫したままでした。問題は、Apple の MCG で使用される乱数生成器の性質にあります。

Wikipedia で説明されているように、MCG の乗数 16807 は 7 で割り切れます。これは、srand() の後に生成される最初の乱数が14 を法として取得した場合、エントロピーが 1 ビットしかないため、値の範囲が制限されます。この欠陥は、Apple が使用する低品質の乱数生成器が原因であると考えられます。

この問題の簡単な解決策は、srand() の後に rand() を数回呼び出し、最初の結果を破棄することです。これにより、生成された数値のエントロピーが強化され、出力される値が制限される問題が解決されます。

以上がApple の MCG で「rand() % 14」が限られた値を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。