2012-02-07 8 views
4

Как добавить точность к drand48() в C++? Я использую его в функции как:Точность drand48

double x = drand48()%1000+1; 

генерировать числа ниже 1000. Но тогда я получаю эту ошибку:

error: invalid operands of types ‘double’ and ‘int’ to binary ‘operator%’ 

Это не происходит, когда я использую:

double x = rand()%1000+1; 

Почему и в чем разница между rand() и drand48()?

ответ

3

drand48 возвращает double в диапазоне от 0.0 до 1.0. Вы хотите умножить это на диапазон, который вы хотите создать. double x = drand48() * 1000.0

4

drand48() возвращает double, тогда как rand() возвращает int.

Кроме того, drand48() возвращает значение, которая распределяется между [0.0, 1.0), так что ваша формула должна измениться:

double x = drand48() * 1000.0 + 1; // floating-point values from [1, 1001) 

или

double x = (int)(drand48() * 1000.0) + 1; // integer values from [1, 1000] 

Вы можете либо масштабировать результат drand48(), как указано выше, или использование lrand48() с вашей существующей формулой.

8

drand48 возвращает номер с интервала [0.0, 1.0). Вы ищете число от 1 до 1000? В этом случае вам нужно умножить на 999 и добавить 1.

Собственно, чего вы ожидаете?

+0

Мне было нужно число от 0 до 1000. Я был смущен тем, что drand48() отличается от rand(). Теперь ясно. Спасибо всем. – freshmaster

+1

+1 для точного определения диапазона. – MSalters

+1

Неточно. Первая найденная мной ссылка имела [0,1]. Это на самом деле [0,1]. –