0

tmpnam()一時ファイルを作成する独自の機能を実装しました。これを調整するには、次の定義を使用します。

/* The length of random string. In /tmp/test143276 is 143246 */
#define RND_ROUND 6
/* Used as a minimal bound produced by number generator      */
#define RND_MIN 100000
/* Used as a maximum bound produced by number generator      */
#define RND_MAX 1000000

ご覧のとおり、実際に必要なマクロはRND_ROUNDであり、その他はナンバ ジェネレータに渡す派生物です。そして、生成するための式は次のとおりです。

RND_MIN = 1 and [RND_ROUND-1] zeros
RND_MAX = 1 and [RND_ROUND] zeros

質問:コンパイル時にベースRND_MINとなるマクロを作成するにはどうすればよいですか?RND_MAXRND_ROUND

例:

#define RND_ROUND 6
// somehow define those RND_MIN and RND_MAX
...
int32_t random = g_rand_int_range(generator, RND_MIN(RND_ROUND), RND_MAX(RND_ROUND));
4

3 に答える 3

3

電力機能を使用して作業を行うことができます。

#define RND_MIN (pow (10, RND_ROUND-1))
#define RND_MAX (pow (10, RND_ROUND))

または、渡された引数に応じて。

#define RND_MIN(val) (pow (10, (val)-1))
#define RND_MAX(val) (pow (10, (val)))
于 2013-07-29T08:44:25.240 に答える
3

私が正しければ、累乗関数を使用できます:

#define RND_MIN(RND_ROUND)  pow(10, RND_ROUND - 1)
#define RND_MAX(RND_ROUND)  pow(10, RND_ROUND)

あなたは読みたいかもしれません:この電力方程式を単純化する方法?

于 2013-07-29T08:45:04.163 に答える