I need to generate random numbers in C [duplicate]

2020-03-24 04:59发布

Possible Duplicates:
How to generate a random number in C?
implementation of rand()
Generating random terrain in Blender3D

I need high quality random numbers in C, but I have no idea what to really do. I need to be able to get numbers from 1-100. Any help or maybe point me to where I can find help.

标签: c random
8条回答
你好瞎i
2楼-- · 2020-03-24 05:13

By "fair distribution", I assume you mean that you're not generally satisfied by rand(). In this case, you should probably use OS-specific methods that produce cryptographically secure random numbers - /dev/random or /dev/urandom (depending on your needs) on Unix, and CryptGenRandom or RtlGetRandom on Win32. On Win32 specifically, if you're using VS2005 or later, you may just use rand_s.

查看更多
趁早两清
3楼-- · 2020-03-24 05:13

As an high-quality random number generator, please do not use rand(), or not-Quality-Assured code. It is extremely easy to generate random number incorrectly (check Knuth's funny story in "The art of Computer Programming: Seminumerical Algorithms"). The easiest way to proceed is maybe to use the generators in GNU's scientific library. It installs with one click on *nux, and there are several ports of the GSL to Windows. I've used it. It is easy to call and works well.

查看更多
虎瘦雄心在
4楼-- · 2020-03-24 05:15

You can try something like this:

main()
{
  srand(time(0));

  for(int i=0;i<1000;++i)
    printf("%f ", ((float)rand())/RAND_MAX*99+1);

  return 0;
}

It's as uniform a distribution as the standard rand() can give.

查看更多
唯我独甜
5楼-- · 2020-03-24 05:16

The standard C library has rand which will probably be sufficient, unless you have a need for a prng with a particular statistical distribution..

查看更多
戒情不戒烟
6楼-- · 2020-03-24 05:20

This is the simplest method of producing uniformly distributed random numbers in C:

Step 1. Be sure to include the standard library header to get the necessary function prototypes

#include <stdlib.h>

Step 2. Seed the random number generator using srand(). The seed determines where the random numbers start. The sequence of random numbers will always be exactly the same for a given seed. This allows you to have random, yet reproducible results. If you don't need it to be reproducible, a good thing to seed with is the current time, so that the random sequence will be different on each run.

srand(time(NULL));

(be sure to include time.h if you do this). Also, only seed the generator once per program run unless you are generating a huge number (millions or billions) of random numbers. Seeding frequently makes the sequence less random.

Step 3. Get your random number.

rand()

This function returns a random number between 0 and RAND_MAX, which is a macro that is defined as a rather large integer.

Step 4. Get your random number into the range you want. The general formula for doing so is this:

int random_number = rand() % range + min;

Where range is how many (consecutive) numbers you want to choose from, and min is the smallest of these. So to generate a number between 1 and 100, range is 100 and min is 1:

int random_number = rand() % 100 + 1;

Some people object to this formula because it uses the low-order bits of the number given by rand(), and in older implementations of software pseudo-random number generators these were often less random than the high order bits, but on any modern system this method should be perfectly fine.

查看更多
我命由我不由天
7楼-- · 2020-03-24 05:20

The other posts have good advice. If you really want to dive into the guts of random number generation, take a look at Numerical Recipes in C. Start with Chapter 7.

查看更多
登录 后发表回答