![]() |
Существуют ли стандартные функции для генерации случайных чисел типа double в диапазоне от 0 до 1.
|
Header File
stdlib.h Category Math Routines Prototype int random(int num); Description Random number generator. random returns a random number between 0 and (num-1). random(num) is a macro defined in stdlib.h. Both num and the random number returned are integers. Return Value random returns a number between 0 and (num-1). //========================================= /* random example */ #include <stdlib.h> #include <stdio.h> #include <time.h> /* prints a random number in the range 0 to 99 */ int main(void) { randomize(); printf("Random number in the 0-99 range: %d\n", random (100)); return 0; } |
И все-же хотелось бы услышать ответ.
Цитата:
|
bilytur
Код:
|
shurikan
Твой способ генерит случайные числа из ограниченного множества не превышающего 0x3FFFFFFF, в то время как всех возможных чисел типа double гораздо больше. Как я понял стандартных функций для генерации случайных чисел типа double в С нет :( |
bilytur
Воспользуйся типом __int64, значащими будут 63 разряда - диапазон double перекрыт, т.е. значений гораздо больше, чем влезет в double. :) [s]Исправлено: shurikan, 4:15 20-11-2003[/s] |
shurikan
Имхо чтоб был смысл в использовании __int64 нужно чтоб была функция: __int64 random(__int64); На самом деле дела обстоят еще хуже: В MSVC 6 (не знаю как в других) никаких функций random(); randomize(); вообще нет! Искал в MSDN - нет таких. В Инклудах - тоже нет. Есть int rand( void ); Функция rand() возвращает случайное число в диапазоне 0..32767 т.е. фактически short int. Кстати при таком раскладе даже первый твой пример не прокатывает. |
bilytur
А ты из 4-х с помощью умножений и сложений не можешь сделать __int64??? |
Можно конечно и с помощью умножений и сложений...
Можно и вообще свой генератор написать... Только вопрос был вроде о стандартных функциях. А их НЕТ. Точка. :) |
bilytur
Ты что-то путаешь. Есть стандартные алгоритмы генераторов случайных чисел. Да, в них используются целочисленные операнды. Любой алгоритм можно представить для чисел различной разрядности. Если ты будешь реализовывать этот алгоритм для чисел длиной 53 бита, то результат можно рассматривать как мантиссу числа с плавающей точкой. Чем не стандартный алгоритм для чисел типа double? Многоточие... :) Добавлено: Да, если говорить о "стандартных" функциях типа rand у Borland-а, то у кого-то их нет. Т.е. эти функции не являются стандартными. Но такие функции всё-таки входят в состав библиотек. Например в GCC в файле stdlib.h (обрати внимание на префикс std - я так думаю, имеется ввиду "стандартная библиотека") есть объявление следующих функций: Код:
:oszone: |
Если они такие "стандартные", то почему их нет у меня в MSVC++ 6.0 ?
Мелкомягкие забыли включить их в состав ? Или у каждого производителя свои "стандарты" ? Какие "стандартные" функции есть в MSVC++ для генерации случайных чисел различной разрядности? Это я так. Мысли вслух. Отвечать необязательно. Ну, если только на последний вопрос. :) |
bilytur
Стандартных проме rand функций нет. Возьми генератор откуда-нить из инета - их существует масса готовых, быстрых и дающих при этом достаточный разброс. shurikan Это всё изобретения от gcc, в манах об этом должно быть написано, по идее. |
ivank
Оно есть в info libc. Оттуда и цитировал. :) |
Время: 11:58. |
Время: 11:58.
© OSzone.net 2001-