2013-05-07 3 views
3

동적으로 배열을 두 개 할당하고 각 요소를 양수 또는 음수 범위 내에서 임의의 값으로 설정하려고하는데 어려움을 겪고 있습니다.rand() 결과를 네거티브를 포함한 특정 범위의 값으로 설정하는 방법은 무엇입니까?

지금은 숫자 0 - 최대를 설정하는 방법 만 알아낼 수 있습니다. 여기

는 내가 지금까지 무엇을 가지고 :

double *random_arr(int size, double min, double max) { 
    double *array0 = calloc(size, sizeof(double)); 
    if (array0 == NULL) { 
      exit(1); 
    } 
    for (int i = 0; i < size; i++) 
      array0[i] = (max * rand()/RAND_MAX); 
    return array0; 
} 

내 추측 :

for (int i = 0; i < size; i++) 
    array0[i]=((max + min) * rand()/RAND_MAX) - min; 

답변

4

범위이어야한다 (최대 - 최소), 당신은 것을 나누어 곱셈 계수를 미리 계산할 수 있습니다 RAND_MAX에 의해.

double factor = (max - min)/RAND_MAX; 
for (int i = 0; i < size; i++) 
    array0[i] = (rand() * factor) + min; 
1

가정 랜드()는 부동 소수점 숫자를 반환 0 < = X < 1, 당신은 단순히 원하는 숫자의 범위가 확장 후 최소를 추가해야합니다.

예 : 우리는 -100에서 숫자가 -10하려는

귀하의 범위는 최대입니다 - (-100) =

(90)의 가정하자 귀하의 임의의 숫자가 0.5

입니다 -하는 최소 -10

0.5 * 90 + -100 (최소) = -55

는의 가장자리 사례를 확인하자

난수 = 0.0

,515,

0.0 * 90 + = -100 -100

난수 = 0.9999999999 ...

0.99999999 ... * 90 + -100 -10

그레이트!

관련 문제