2

PHPでGNUMPの関数gmp_random()を使用したいと思います。必要なビットの正確な値を設定する必要があります(たとえば、64ビット長の乱数)。

リミッターパラメータは、「手足あたりのビット数」で乗算されます。この値を取得するにはどうすればよいですか?これはCPUのビット数と同等ですか、それとも値を取得するためのPHP関数はありますか?

元のライブラリでは、constmp_bits_per_limbで表されます。

4

2 に答える 2

2

それを解決する簡単な方法はないようです。

mp_bits_per_limbがPHP_INT_SIZE*8に等しいふりをして、それを使用することができます(すべてのアーキテクチャではなく、ほとんどのアーキテクチャで機能します)。結果として生じるバグは、開発者にとってデバッグするのが難しく、価値のあるものになります。だからこれはおそらく行く方法です:)

または、mp_bits_per_limbが16より小さくならないことを知って回避します。したがって、「number_of_bits_you_want / 16」を使用して、ビット数が多すぎる結果を取得し、gmp_and()の結果を0xFFFF、0xFFFFFFFF、または0xFFFFFFFFFFFFFFFFに削減します。 16、32、または64ビット。

于 2012-06-19T23:02:58.390 に答える
0

私は今それを修正するパッチを書きました:https ://bugs.php.net/bug.php?id = 62375

このパッチは、定数「GMP_LIMB_BITS」をPHPに登録します。

于 2012-06-22T18:18:23.410 に答える