Я заинтересован в C ++, хотя подозреваю, что он просто импортирует стандартное определение языка C. Я полагаю, что ответ не на то, что говорится в стандарте, но меня больше всего интересует практический ответ.
Если RAND_MAX всегда (2 ^ n) -1, это упрощает решение проблемы, которая вызвала недавно перемещенный код из MinGW GCC в Linux GCC. RAND_MAX кажется больше (я не проверял, но, возможно, равен INT_MAX или какому-либо символу), поэтому какой-то старый, наивно написанный RAND_MAX-код не достаточно большой, чтобы его можно было обойти. Теперь мне нужно решить, насколько общей должна быть эта библиотека, учитывая аккуратность написания кода, который корректно справляется с возможностью переполнения, не делая предположений, например, о. ширина целого.
В любом случае, есть ли достаточно широко используемые компиляторы C ++, которые используют что-то отличное от (2 ^ n) -1 для RAND_MAX?
Кроме того, правильно ли я, что ((RAND_MAX | (RAND_MAX >> 1)) == RAND_MAX) всегда и только верно, если RAND_MAX равен ((2 ^ n) -1) для некоторого целого числа без знака n. Я считаю, что RAND_MAX технически является int, но не имеет смысла иметь отрицательное или дробное значение, поэтому я думаю, что могу смело обесценивать их. Меня ничего не беспокоит, но я продолжаю думать, что выражение выглядит неправильно, и не могу понять, почему.
Наконец, хотя я не буду счастлив, пока не получу свое собственное рабочее решение, что должен использовать для случайных чисел, а не писать его сам? Мне нужны случайные числа в диапазоне 0 <= x <параметр, и я особенно хочу, чтобы вероятности как равные, как и разумно возможные для всех чисел. Например, взятие (rand ()% upperbound) смещает в сторону меньших значений, особенно когда верхняя граница велика - я хочу этого избежать. </p>
Есть ли для этого Boost или C ++ 0x?
EDIT
После чего-то в бите «Связанные» на боковой стороне страницы показано, что действительно есть способ получить случайные числа с заданными нижними и верхними границами в усилении.