beldmit: (Default)
[personal profile] beldmit
Последними дискуссиями у Витуса навеяло.

Я очень хорошо помню этот момент. Год был 1992-й, я только поступил в институт. Мы с Лешей Студеновым собирались писать на Pascal-е (C я тогда не знал) некую экономическую игру. Договорились вечером, разошлись по домам, и я задумался.

Игра начиналась с раздачи карт. Карты естественным образом ложились в двумерный массив, а раздавать надо было датчиком случайных чисел. И тут я задумался - а что, если одна и та же карта выпадет в раздаче дважды? Немного подумав, я понял, что просто повторять раздачу этой карты бесполезно - то же число может выпасть и третий раз. Мне стало очень грустно. И тут меня осенило - есть же цикл while! Он решит все проблемы!

Второго такого озарения с тех пор в моем програмистском опыте не было. Но ощущения я запомнил навсегда.

Date: 2009-03-03 05:12 am (UTC)
From: [identity profile] beldmit.livejournal.com
Ты знаешь, я как правило не помню порядок аргументов и тому подобные вещи.

Кстати, полагаю, что либо это в стандарте не особо оговорено, либо каждый производитель компилятора трактует по-всякому.

Из ISO 9899:1999 (E)

Date: 2009-03-03 07:43 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

7.20.2.1/2: The rand function computes a sequence of pseudo-random integers in the range 0 to RAND_MAX.

[…]

7.20.2.2/5: Example: The following functions define a portable implementation of rand and srand.

static unsigned long int next = 1;

int rand(void) // RAND_MAX assumed to be 32767
{
    next = next * 1103515245 + 12345;
    return (unsigned int)(next / 65536) % 32768;
}

void srand(unsigned int seed)
{
    next = seed;
}

То есть да, формулировка недостаточно точная, но пример всё проясняет.

Profile

beldmit: (Default)
Dmitry Belyavskiy

December 2025

S M T W T F S
 123456
78910111213
14151617181920
2122 2324252627
28 29 3031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 10th, 2026 02:51 pm
Powered by Dreamwidth Studios