## Java で特定の範囲内でランダムな BigInteger 値を生成するにはどうすればよいでしょうか?
Java でのランダムな BigInteger 値の生成
指定された範囲内で任意に大きいランダムな整数を生成する必要があるシナリオでは、一般的なアプローチとして nextDouble() を使用して乗算することが考えられます。希望の制限による出力。ただし、この方法は 2^53 を超える値の場合に問題が発生し、不均一な分布が発生します。
この制限を克服するために、Java には BigInteger クラスが用意されており、このクラスは 0 と 2 の間で均一に分布する乱数を生成するコンストラクターを提供します。 (2^numBits - 1) (両端を含む)。
2 のべき乗ではない範囲内のランダム値を生成する
0 から n の範囲でランダムな値を生成するには、n を指定します。が 2 の累乗ではない場合は、単純なループを使用できます。
<code class="java">BigInteger randomNumber; do { randomNumber = new BigInteger(upperLimit.bitLength(), randomSource); } while (randomNumber.compareTo(upperLimit) >= 0);</code>
この反復アプローチにより、目的の範囲内で均一な分布が保証されます。通常、必要な反復は 1 つまたは 2 つだけです。
ループ内の反復の制限
乱数ジェネレーターの計算コストが高いシナリオでは、ループ内の反復数を次のように制限できます。 :
<code class="java">int nlen = upperLimit.bitLength(); BigInteger nm1 = upperLimit.subtract(BigInteger.ONE); BigInteger randomNumber, temp; do { temp = new BigInteger(nlen + 100, randomSource); randomNumber = temp.mod(upperLimit); } while (s.subtract(randomNumber).add(nm1).bitLength() >= nlen + 100);</code>
この修正バージョンでは複数の反復が必要になる可能性はほとんどありません (確率は 2^100 未満)。ただし、mod() 操作により計算上のペナルティが発生します。したがって、乱数ジェネレータが特に遅い場合にのみ推奨されます。
以上が## Java で特定の範囲内でランダムな BigInteger 値を生成するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?

Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?

高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?
