目次
C# のランダム クラス
擬似的で安全
RNGCryptoServiceProvider クラス
C# の乱数生成関数
C# の乱数ジェネレーター整数
例 #1
C# での浮動小数点数の生成
A Very Common Mistake
Example #1
How Random Numbers are all the same and Why did this happen?
Conclusion

C# の乱数ジェネレーター

Sep 03, 2024 pm 03:34 PM
c# c# tutorial

乱数ジェネレーターは、整数と浮動小数点数をランダムに生成する C# の組み込みライブラリです。ライブラリの関連メソッドが呼び出されるたびに、乱数が返されます。一連の乱数は、どのパターンにも従わない一連の数値です。 C# の乱数ジェネレーターは、呼び出されるたびにこのような系列を生成する傾向があります。

C# のランダム クラス

  • それでは、C# はどのようにして一連の乱数を生成するのでしょうか?答えは、C# System 名前空間の Random クラス内にあります。
  • Random クラスは、擬似乱数生成クラスです。これは、このクラスがどのパターンにも従わない一連の数値を生成するタスクを負っていることを意味します。しかし、機械は本当に乱数を生成できるのでしょうか?マシンは次にどの数値を生成するかをどうやって知るのでしょうか?結局のところ、マシンは命令に従ってアルゴリズムを実行するように設計されています。
  • いいえ、マシンは独自に乱数を生成できません。現在のクロックとマシンの状態に基づいて、セットから数値を選択するように導く定義された数学的アルゴリズムがあります。セット内のすべての数字が選択される確率は同じです。したがって、それらは完全にランダムではありません。彼らはあるパターンに従います。ただ、パターンが人間の実際の要件を満たすのに十分ランダムであるというだけです。

擬似的で安全

次に頭に浮かぶ疑問は、なぜそれを擬似乱数生成クラスと呼ぶのかということです。これを実際の人間の行動から理解してみましょう。人間がランダムな色を選択するように求められると、特定の色を選択します。彼が黄色を選んだとしましょう。彼が黄色を選んだ理由は何ですか?それは彼の好きな色かもしれないし、周囲の色かもしれないし、あるいはその時彼は何か黄色のことを考えていたかもしれない。何かをランダムに選択するという決定を促すこの人間の行動は、ランダム性の世界ではシードと呼ばれます。シードは、ランダム性のトリガーまたは開始点です。

シードが予測可能であれば、乱数はそれほどランダムではなくなります。これらは擬似乱数と呼ばれます。予測できない場合、それらは安全な乱数と呼ばれます。

C# Random クラスは現在のタイムスタンプをシードとして使用しますが、これは非常に予測可能です。したがって、擬似乱数生成クラスという用語が使われます。

RNGCryptoServiceProvider クラス

System.Security.Cryptography 名前空間の RNGCryptoServiceProvider クラスは、パスワードとして使用できる安全な乱数を生成できます。

C# の乱数生成関数

C# で乱数を生成するには、まず Random クラスを初期化します。これは、クラスの 2 つのコンストラクターのいずれかによって実行できます。

  • Random(): 時間ベースのシード値を使用して Random クラスのオブジェクトを初期化します。シード値はマシンの現在のタイムスタンプです。ただし、後のバージョンでは、これは GUID ベースに変更されました。
  • Random(Int32): 指定されたシード値を使用して Random クラスのオブジェクトを初期化します。系列から次の乱数を取得するには、Random クラスの Next() メソッドを呼び出します。
  • Next(): 非負の擬似乱数 Int32 整数を返します。
  • Next(Int32): 指定された整数より小さい非負の擬似乱数 Int32 整数を返します。
  • Next(Int32, Int32): 指定された範囲内の非負の擬似乱数 Int32 整数を返します。

C# の乱数ジェネレーター整数

ランダムな整数を生成する方法の例を見てみましょう:

例 #1

以下の例は、ランダムな Int32 数値を生成します。

コード:

using System;
public class Program
{
public static void Main()
{
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd));
}
public static int GenerateRandomInt(Random rnd)
{
return rnd.Next();
}
}

出力:

C# の乱数ジェネレーター

例 #2

以下の例では、0 ~ 100 の範囲のランダムな Int32 数値を生成します。

コード:

using System;
public class Program
{
public static void Main()
{
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd));
}
public static int GenerateRandomInt(Random rnd)
{
return rnd.Next(100);
}
}

出力:

C# の乱数ジェネレーター

例 #3

以下の例では、50 ~ 100 の範囲のランダムな Int32 数値を生成します。

コード:

using System;
public class Program
{
public static void Main()
{
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd));
}
public static int GenerateRandomInt(Random rnd)
{
return rnd.Next(50, 100);
}
}

出力:

C# の乱数ジェネレーター

C# での浮動小数点数の生成

ランダムな浮動小数点数を生成する方法の例を見てみましょう:

例 #1

以下の例は、ランダムな Int32 数値を生成します。

コード:

using System;
public class Program
{
public static void Main()
{
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt(rnd));
}
public static double GenerateRandomInt(Random rnd)
{
return rnd.NextDouble();
}
}

出力:

C# の乱数ジェネレーター

A Very Common Mistake

The most common mistake developers commit while generating random numbers is that for each random number, they create a new object of Random Class. As illustrated in the example below:

Example #1

Code:

using System;
public class Program
{
public static void Main()
{
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number {0} : {1}", i + 1, GenerateRandomInt());
}
public static int GenerateRandomInt()
{
Random rnd = new Random();  //a very common mistake
return rnd.Next();
}
}

Output:

C# の乱数ジェネレーター

How Random Numbers are all the same and Why did this happen?

As explained in the working of Random Class, the numbers generated are based on the seed value and the current state of the machine. Any instance of Random class starts with the seed value, saves the current state and uses it to generate the next random number. In the code above, the mistake was to create a new instance of the Random class in every iteration of the loop. So, before the time in the internal clock changes, the code is fully executed, and each instance of Random class is instantiated with the same seed value. This results in the same set of numbers generated every time.

Conclusion

In this article, we learnt about the random number generator in C# and how it internally works to generate random numbers. We also briefly learnt the concept of pseudo-random and secure-random numbers. This information is sufficient for developers to use the Random class in their applications. Deep dive, if interested to explore more on random numbers for passwords and one-time passwords.

以上がC# の乱数ジェネレーターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

C#対C:歴史、進化、将来の見通し C#対C:歴史、進化、将来の見通し Apr 19, 2025 am 12:07 AM

C#とCの歴史と進化はユニークであり、将来の見通しも異なります。 1.Cは、1983年にBjarnestrostrupによって発明され、オブジェクト指向のプログラミングをC言語に導入しました。その進化プロセスには、C 11の自動キーワードとラムダ式の導入など、複数の標準化が含まれます。C20概念とコルーチンの導入、将来のパフォーマンスとシステムレベルのプログラミングに焦点を当てます。 2.C#は2000年にMicrosoftによってリリースされました。CとJavaの利点を組み合わせて、その進化はシンプルさと生産性に焦点を当てています。たとえば、C#2.0はジェネリックを導入し、C#5.0は非同期プログラミングを導入しました。これは、将来の開発者の生産性とクラウドコンピューティングに焦点を当てます。

C#マルチスレッドプログラミングとは何ですか? C#マルチスレッドプログラミングでは、C#マルチスレッドプログラミングを使用します C#マルチスレッドプログラミングとは何ですか? C#マルチスレッドプログラミングでは、C#マルチスレッドプログラミングを使用します Apr 03, 2025 pm 02:45 PM

C#マルチスレッドプログラミングは、プログラムが複数のタスクを同時に実行できるようにするテクノロジーです。パフォーマンスを改善し、応答性を改善し、並列処理を実装することにより、プログラムの効率を改善できます。スレッドクラスはスレッドを直接作成する方法を提供しますが、タスクやAsync/待望などの高度なツールは、より安全な非同期操作とクリーンなコード構造を提供できます。マルチスレッドプログラミングの一般的な課題には、デッドロック、レース条件、リソースリークが含まれます。これらのリソースモデルの設計と、これらの問題を回避するために適切な同期メカニズムの使用が必要です。

C#.NET:.NETエコシステムを使用したアプリケーションの構築 C#.NET:.NETエコシステムを使用したアプリケーションの構築 Apr 27, 2025 am 12:12 AM

.NETを使用してアプリケーションを構築する方法は? .NETを使用してアプリケーションを構築することは、次の手順を通じて達成できます。1)C#言語やクロスプラットフォーム開発サポートを含む.NETの基本を理解します。 2)コンポーネントや.NETエコシステムの作業原則などのコア概念を学習します。 3)単純なコンソールアプリケーションから複雑なWebAPISおよびデータベース操作まで、基本的および高度な使用をマスターします。 4)構成やデータベース接続の問題など、一般的なエラーとデバッグ手法に精通している。 5)アプリケーションのパフォーマンスの最適化と非同期プログラミングやキャッシュなどのベストプラクティス。

Webからデスクトップまで:C#.NETの汎用性 Webからデスクトップまで:C#.NETの汎用性 Apr 15, 2025 am 12:07 AM

c#.netisversatileforbothwebanddesktopdevelopment.1)forweb、useasp.netfordynamicapplications.2)fordesktop、equindowsorwpfforrichinterfaces.3)usexamarinforcross-platformdeveliment、enabling deshacrosswindows、

C#でマルチスレッドの利点は何ですか? C#でマルチスレッドの利点は何ですか? Apr 03, 2025 pm 02:51 PM

マルチスレッドの利点は、特に大量のデータを処理したり、時間のかかる操作を実行したりするために、パフォーマンスとリソースの使用率を改善できることです。複数のタスクを同時に実行できるようになり、効率が向上します。ただし、あまりにも多くのスレッドがパフォーマンスの劣化につながる可能性があるため、CPUコアの数とタスク特性に基づいてスレッドの数を慎重に選択する必要があります。さらに、マルチスレッドプログラミングには、同期メカニズムを使用して解決する必要があるデッドロックや人種条件などの課題が含まれ、同時プログラミングの確固たる知識が必要であり、長所と短所を比較検討し、それらを慎重に使用する必要があります。

.NETフレームワーク対C#:用語のデコード .NETフレームワーク対C#:用語のデコード Apr 21, 2025 am 12:05 AM

.NetFrameworkはソフトウェアフレームワークであり、C#はプログラミング言語です。 1..netframeworkは、デスクトップ、Web、モバイルアプリケーションの開発をサポートするライブラリとサービスを提供します。 2.C#は.NetFrameWork用に設計されており、最新のプログラミング機能をサポートしています。 3..NetFrameworkはCLRを介してコード実行を管理し、C#コードはILにコンパイルされ、CLRによって実行されます。 4. .NetFrameWorkを使用してアプリケーションをすばやく開発し、C#はLINQなどの高度な関数を提供します。 5.一般的なエラーには、タイプ変換と非同期プログラミングデッドロックが含まれます。 VisualStudioツールは、デバッグに必要です。

azure/awsへのc#.netアプリケーションの展開:ステップバイステップガイド azure/awsへのc#.netアプリケーションの展開:ステップバイステップガイド Apr 23, 2025 am 12:06 AM

c#.netアプリをAzureまたはAWSに展開する方法は?答えは、AzureAppServiceとAwselasticBeanStalkを使用することです。 1。Azureでは、AzureAppServiceとAzurePipelinesを使用して展開を自動化します。 2。AWSでは、Amazon ElasticBeanstalkとAwslambdaを使用して、展開とサーバーレス計算を実装します。

See all articles