Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[질문] C 언어에서 1-100 사이의 정수 random 생성...

4,003 views
Skip to first unread message

등대이고싶다

unread,
Feb 14, 2001, 4:33:54 AM2/14/01
to
솔라리스에서 C 언어로 프로그램을 짜고 있습니다..

1-100 사이의 정수 중에서 5개를 겹치지 않게 random 하게 뽑는 프로그램을 짜야
되는데요...

이것을 어떻게 짜야 되는지 모르겠네요...
rand, srand 함수를 이용하면 될 것 같은데.. 이상하게 안 되는군요...

혹시.. 이런 프로그램을 짜보신 분이나.. 혹시 소스가 있는 곳을 아시는 분
계시면.. 저에게 연락부탁드립니다..

그럼 미리 감사...

Kim Sungbom

unread,
Feb 14, 2001, 9:51:48 AM2/14/01
to
"등대이고싶다" wrote:
>
> 1-100 사이의 정수 중에서 5개를 겹치지 않게 random 하게 뽑는 프로그램을 짜야
> 되는데요...
>
> 이것을 어떻게 짜야 되는지 모르겠네요...
> rand, srand 함수를 이용하면 될 것 같은데.. 이상하게 안 되는군요...

1. srand()로 난수열을 초기화한다. (프로그램의 제일 처음에 한번만)
2. 정수 5개가 들어갈 자리를 준비한다. (배열이 되겠지요?)
3. rand()를 이용하여 1-100 사이의 정수 하나를 구한다.
4. 3에서 구한 정수가 이미 나온 적이 있어서 2에서 준비한 자리에
들어가 있는 것인지 검사한다.
5. 그렇다면 2에서 준비한 자리에 추가해 넣는다.
6. 아직 다섯 개가 뽑히지 않았다면 3으로 가서 반복한다.
(3에서 6 사이를 while로 묶으면 되겠지요.)

이 정도를 가지고 코드는 스스로 짜보시기 바랍니다.

--
김승범
/* 메일 질문에는 답하지 않습니다. 질문은 뉴스그룹에 이어서 해주세요. */

등대이고싶다

unread,
Feb 14, 2001, 9:21:29 PM2/14/01
to
알려주신 스텝에서 3번에서 문제가 발생합니다...
즉, rand() 를 이용해서 1-100 사이의 정수를 구하는 것을 모르겟습니다..

srand() 를 time 을 이용해서 초기화 한 후
rand(), rand(100) 뭐 이렇게 하면...아래와 같은 얼토당토 않은 값이
나옵니다.. --;;;

2078917053 143302914 1027100827 1953210302 755253631

프로그램은 아래와 같습니다...
main()
{
int a, z, stime;
long ltime;

ltime=time(NULL);
stime = (unsigned)ltime/2;
srand(stime);

for(z=0; z<5; z++) {
a=rand();
printf("%d ", a);
}
}

번거로우시겠지만.. 다시 한 번 답변 부탁드립니다...

미리 감사~~~

"Kim Sungbom" <musi...@bawi.org> wrote in message
news:3A8A9B84...@bawi.org...

Shift F1

unread,
Feb 14, 2001, 10:57:02 PM2/14/01
to
a=rand()%100 + 1; 하세요...

"등대이고싶다" <gu...@major.kaist.ac.kr> wrote in message
news:96fehv$a6i$1...@usenet.kreonet.re.kr...

Kim Sungbom

unread,
Feb 15, 2001, 11:10:37 AM2/15/01
to
Shift F1 wrote:
>
> a=rand()%100 + 1; 하세요...

이 역시 이 그룹에서 입이 닳도록 나온 얘기지만..
이렇게 하는 것은 안 좋습니다. rand() 결과값들의 하위 비트를 이용하기
때문에 제대로 된 난수가 안 나온다는 겁니다.

"Numerical Recipes in C: The Art of Scientific Computing" 책을 보면
다음과 같이 나와있다고 합니다. (rand(3) manpage에 따르면..)

"If you want to generate a random integer between 1
and 10, you should always do it by

j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

and never by anything resembling

j=1+((int) (1000000.0*rand()) % 10);

(which uses lower-order bits)."

위 식이 좀 복잡하게 보인다면 매크로 함수를 쓸 수도 있겠습니다.

#define rand_range(r) (int)(rand() * (r) / (RAND_MAX + 1.0))
#define rand_between(low, high) ((low) + rand_range((high) - (low) + 1))

a = 1 + rand_range(100);
a = rand_between(1, 100);

Shift F1

unread,
Feb 15, 2001, 8:27:07 PM2/15/01
to
앗.
그렇군요.
"등대이고싶다"님에게는 죄송....
흐흐 랜덤의 나머지를 이용한적이 없어서...
그냥 그렇게 하면 되는지 알았는데 ...
오늘도 뉴스그룹에 들어와서 하나 건지네요..

김성범님에게 감사....

"Kim Sungbom" <musi...@bawi.org> wrote in message

news:3A8BFF7D...@bawi.org...

Chong-Dae Park

unread,
Feb 15, 2001, 9:51:53 PM2/15/01
to
Kim Sungbom <musi...@bawi.org> wrote:
> 이 역시 이 그룹에서 입이 닳도록 나온 얘기지만..
> 이렇게 하는 것은 안 좋습니다. rand() 결과값들의 하위 비트를 이용하기
> 때문에 제대로 된 난수가 안 나온다는 겁니다.

늘 제가 붙이는 사족(!)도 있습니다.

rand()는 난수 자체가 나쁩니다. Solaris라면 random() 함수를 사용하세요.
사용법은 비슷합니다. 자세한 건 man random...

--
박종대
--
The story so far:
In the beginning the Universe was created.
This has made a lot of people very angry and been widely regarded
as a bad move.
-- "The Restaurant at the End of the Universe", Douglas Adams

Kim Sungbom

unread,
Feb 16, 2001, 1:38:20 AM2/16/01
to
Chong-Dae Park wrote:
>
> rand()는 난수 자체가 나쁩니다. Solaris라면 random() 함수를 사용하세요.
> 사용법은 비슷합니다. 자세한 건 man random...

rand()는 ISO 9899 즉 C 언어의 표준에 포함되어 있는 함수이고,
random()은 BSD 4.3의 규격에 포함되어 있는 함수라고 알고 있는데,
BSD에서는 왜 시스템에서 제공할 수 있는 제일 양질의 난수를 rand()를
통해서 제공하지 않고 별도의 함수를 만들어서 제공하는 것입니까?
random()을 통해 제공하는 (양질의) 난수를 rand()를 통해 제공하면
안 될 만한 제한 사항이 ISO 9899의 rand() 관련 부분에 있기라도 한
것인가요?

좀더 실용적(?) 말하자면, 왜 프로그래머는 환경에 상관 없이
이식성 좋은 rand()를 써서 프로그래밍하면서 그 시스템에서 얻을 수 있는
가장 좋은 질의 난수를 얻게 하면 좋을 텐데, BSD에서 프로그래밍을 하려면
이식성(rand) 또는 난수의 질(random) 중 하나를 선택하게 만든 것일까요?

--
김승범

Chong-Dae Park

unread,
Feb 16, 2001, 4:01:58 AM2/16/01
to
Kim Sungbom <musi...@bawi.org> wrote:
> rand()는 ISO 9899 즉 C 언어의 표준에 포함되어 있는 함수이고,
> random()은 BSD 4.3의 규격에 포함되어 있는 함수라고 알고 있는데,
> BSD에서는 왜 시스템에서 제공할 수 있는 제일 양질의 난수를 rand()를
> 통해서 제공하지 않고 별도의 함수를 만들어서 제공하는 것입니까?
> random()을 통해 제공하는 (양질의) 난수를 rand()를 통해 제공하면
> 안 될 만한 제한 사항이 ISO 9899의 rand() 관련 부분에 있기라도 한
> 것인가요?

rand()의 구현방법까지 표준화된게 아닐까요?
(ISO 문서엔 어떻게 나와있나요?)

X/Open 4.0 표준에서 lrand48() 등의 함수가, POSIX XPG 4.2에서 random()이
추가된 듯(!) 싶네요. (Solaris 8의 stdlib.h의 comment로 추정해볼 때..)

> 좀더 실용적(?) 말하자면, 왜 프로그래머는 환경에 상관 없이
> 이식성 좋은 rand()를 써서 프로그래밍하면서 그 시스템에서 얻을 수 있는
> 가장 좋은 질의 난수를 얻게 하면 좋을 텐데, BSD에서 프로그래밍을 하려면
> 이식성(rand) 또는 난수의 질(random) 중 하나를 선택하게 만든 것일까요?

Solaris 8과 IRIX 6의 구현을 비교해보니, rand(), lrand48(), random()의
random sequence가 모두 같더군요. 같은 함수명으로 다른 구현을 가지고 있는
것이 어쩌면 더 문제일지도 모르죠.

(시뮬레이션을 위해 의사난수를 발생시켰는데 기계마다 다르다면...)

--
박종대
--
The Ultimate Question is....
W.H.A.T.D.O.Y.O.U.G.E.T.I.F.Y.O.U.M.U.L.T.I.P.L.Y.S.I.X.B.Y.N.I.N.E.....
- "The Restaurant at the End of the Universe", D. Adams -

myco...@hanmail.net

unread,
Feb 19, 2001, 10:53:06 AM2/19/01
to


-----------------===== Posted via NetPle Usenet Service =====-----------------
http://news.NetPle.com 에 접속하시면 새로운 유즈넷이 열립니다.

myco...@hanmail.net

unread,
Feb 19, 2001, 10:55:48 AM2/19/01
to
>Chong-Dae Park wrote:
>>
>> rand()는 난수 자체가 나쁩니다. Solaris라면 random() 함수를 사용하세요.
>> 사용법은 비슷합니다. 자세한 건 man random...

인터넷이 되지 않던곳에 한동안 있다 왔더니 적응이 되질 않는군요. ^^
더군다나 Deja 를 잃은 후로는, 뉴스그룹 보는 것도 골치아프군요.

난수의 질이 좋지 않다는 것은, 어떠한 특성을 의미하시는 건지 궁금합니다.
(아마도 동일한 seed 에 동일한 난수열을 생성해내는 것을 좋지않다고
표현하시는 건지요?)

>
>rand()는 ISO 9899 즉 C 언어의 표준에 포함되어 있는 함수이고,
>random()은 BSD 4.3의 규격에 포함되어 있는 함수라고 알고 있는데,
>BSD에서는 왜 시스템에서 제공할 수 있는 제일 양질의 난수를 rand()를
>통해서 제공하지 않고 별도의 함수를 만들어서 제공하는 것입니까?
>random()을 통해 제공하는 (양질의) 난수를 rand()를 통해 제공하면
>안 될 만한 제한 사항이 ISO 9899의 rand() 관련 부분에 있기라도 한
>것인가요?

pseudo-random number sequence (의사난수열) 의 두가지 중요한 특징이
있습니다. 한가지는, 그것들이 난수여야 한다는 것입니다 (- 너무 당연한
이야기인가요?). 또 한가지는 조금 이상하게 들릴지 모르겠지만, 예측이
가능해야 한다는 것입니다. ^^ 표준에서는 동일한 random number seed 에
대해서 동일한 난수열을 생성하도록 (동일한 난수열이 반복되도록) 요구
하고 있습니다. 또한 다른 라이브러리 함수가 rand 나 srand 를 사용해서는
안된다고 (물론, 그런것처럼 행동해야 한다고 - as if) 요구하고 있습니다.
이는 난수를 사용한 계산이 (예를 들면) 디버깅 과정에서 프로그래머가
원하는 행동을 해주길 바라는 경우를 위해서입니다.

예측 불가능하다고 생각되는 난수생성은 seed 에 영향을 주는 요소를 적절
히 바꾸므로써 (time 을 사용한다든가.. 가장 흔한방법이죠) 이루어질 수
있습니다.

>
>좀더 실용적(?) 말하자면, 왜 프로그래머는 환경에 상관 없이
>이식성 좋은 rand()를 써서 프로그래밍하면서 그 시스템에서 얻을 수 있는
>가장 좋은 질의 난수를 얻게 하면 좋을 텐데, BSD에서 프로그래밍을 하려면
>이식성(rand) 또는 난수의 질(random) 중 하나를 선택하게 만든 것일까요?
>

random 함수가 어떠한 의미를 갖고 어떠한 행동을 하도록 정의되었는지는
표준에서 상관할바가 아닙니다. (저또한 random 함수는 잘 사용하지 않으
므로 구체적으로 어떠한 차이가 있는지는 모르겠습니다) 하지만, rand 함
수는 제가 위에서 언급한 요구를 만족해야만 합니다. 그러다 보니 그 구현
방법에 어느정도 제약이 가해지는 것이 사실입니다. 어떻게 구현하든 그건
implementor 의 몫이지만, 결과는 표준이 요구하는 바를 모두 만족해야
합니다. 재밌는 것은 표준은 rand 와 srand 함수의 구현예를 싣고 있습니다.
골치 아프게 이것저것 생각할 필요없이 몇가지 요소 (type 의 크기) 만을
수정하고 그대로 베껴쓰는 것인 가장 속편한 방법이죠 :)

여독이 풀리지 않아 정신이 없네요..
다른 답변은 내일 해야 겠습니다. 그럼...


--
Jun Woong (myco...@hanmail.net)
Dept. of Physics, Univ. of Seoul
Cell: +82 16 467 6247
Web : http://c_expert.hihome.com (Korean only)
[K&R2 Reference Manual 번역본 제공]

December

unread,
Feb 20, 2001, 3:34:26 AM2/20/01
to
답변 받으시는 분 이해를 돕고자 올리는 길입니다. :)

<myco...@hanmail.net> wrote in message news:96rfm4$63g$1...@news.netple.com...
(중략)


>
> pseudo-random number sequence (의사난수열) 의 두가지 중요한 특징이
> 있습니다. 한가지는, 그것들이 난수여야 한다는 것입니다 (- 너무 당연한
> 이야기인가요?). 또 한가지는 조금 이상하게 들릴지 모르겠지만, 예측이
> 가능해야 한다는 것입니다. ^^ 표준에서는 동일한 random number seed 에
> 대해서 동일한 난수열을 생성하도록 (동일한 난수열이 반복되도록) 요구
> 하고 있습니다. 또한 다른 라이브러리 함수가 rand 나 srand 를 사용해서는
> 안된다고 (물론, 그런것처럼 행동해야 한다고 - as if) 요구하고 있습니다.
> 이는 난수를 사용한 계산이 (예를 들면) 디버깅 과정에서 프로그래머가
> 원하는 행동을 해주길 바라는 경우를 위해서입니다.
>
> 예측 불가능하다고 생각되는 난수생성은 seed 에 영향을 주는 요소를 적절
> 히 바꾸므로써 (time 을 사용한다든가.. 가장 흔한방법이죠) 이루어질 수
> 있습니다.

질이 나쁘다는 것은 정말로 말 그대로 질이 나쁘다는 것입니다.
동일한 seed에서는 물론 동일한 난수열이 나와야 하는 것이 맞습니다.
그럼 질 좋은 난수란 뭘까요 ? 아직 명확한 정의를 본적은 없습니다.
하물며, 난수가 뭘까 정의하는 것은 확률이 무엇인가 정의하는 것만큼이나
어렵습니다.
C에서 쓰는 rand()는 rule이 있기 때문에 분명 우리가 원하는 완전한(?)
난수는 될 수 없습니다.

그럼 어떤 경우 질이 나쁠까요 ?
제가 경험한 바로는, rand()를 반복적으로 호출하여 배열값을 배정하고,
그것을 폭 512의 디지털 이미지로 만들어보았습니다. 그랬더니 희한하게도
이미지에 '빗살무늬'가 나타났습니다. 완전한 난수라면 이미지에서 어떤
기하학적인 모양을 발견할 일이 극히 드물겠지요. 하지만 저는, 그 무늬를
지우기가 더 어려웠습니다 !
rand()의 알고리듬을 모르는 상태에서, 다른 방법으로 그 알고리듬의 특성을
쉽게 도출시킬 수 있다면, 그것은 좋은 rand()함수가 아닙니다. 이것은
아마도 수학에서 Algebra를 하시는 분들의 몫일 겁니다. 아마 약수를 포함하지
큰 소수를 찾는 일과 비슷하다고 생각하면 될 것 같습니다.

>
> >
> >좀더 실용적(?) 말하자면, 왜 프로그래머는 환경에 상관 없이
> >이식성 좋은 rand()를 써서 프로그래밍하면서 그 시스템에서 얻을 수 있는
> >가장 좋은 질의 난수를 얻게 하면 좋을 텐데, BSD에서 프로그래밍을 하려면
> >이식성(rand) 또는 난수의 질(random) 중 하나를 선택하게 만든 것일까요?
> >
>
> random 함수가 어떠한 의미를 갖고 어떠한 행동을 하도록 정의되었는지는
> 표준에서 상관할바가 아닙니다. (저또한 random 함수는 잘 사용하지 않으
> 므로 구체적으로 어떠한 차이가 있는지는 모르겠습니다) 하지만, rand 함
> 수는 제가 위에서 언급한 요구를 만족해야만 합니다. 그러다 보니 그 구현
> 방법에 어느정도 제약이 가해지는 것이 사실입니다. 어떻게 구현하든 그건
> implementor 의 몫이지만, 결과는 표준이 요구하는 바를 모두 만족해야
> 합니다. 재밌는 것은 표준은 rand 와 srand 함수의 구현예를 싣고 있습니다.
> 골치 아프게 이것저것 생각할 필요없이 몇가지 요소 (type 의 크기) 만을
> 수정하고 그대로 베껴쓰는 것인 가장 속편한 방법이죠 :)

rand()함수의 알고리듬이 표준으로 공개될 경우에 좋은 경우가 있습니다.
바로 암호화 개발 분야 입니다.
여기서는 서로 다른 시스템에서 두 개의 키를 생성해야 하는데, 두 시스템이
컴파일러 호환성을 가지지 않을 때에, rand()가 표준으로 되어있다는 것은
서로 같이 사용할 수 있는 rand() 함수를 새로 개발해야 한다는 부담을
없애줍니다.

참고로 type의 크기, 즉 비트 수가 바뀌면 호환되는 rand()함수라 볼 수 없겠
지요. 둘 중 하나는 표준을 벗어날 것입니다.

제 글이 많은 분들에게 도움이 되었으면 합니다.

--
Kim, Joonwoo


Jun Woong

unread,
Feb 20, 2001, 7:36:26 AM2/20/01
to

"December" <yhex...@yahoo.com> wrote in message
news:96ta0r$9o4$1...@news2-2.kornet.net...

> 답변 받으시는 분 이해를 돕고자 올리는 길입니다. :)
>
> <myco...@hanmail.net> wrote in message
news:96rfm4$63g$1...@news.netple.com...
> (중략)
> >
> > pseudo-random number sequence (의사난수열) 의 두가지 중요한 특징이
> > 있습니다. 한가지는, 그것들이 난수여야 한다는 것입니다 (- 너무 당연한
> > 이야기인가요?). 또 한가지는 조금 이상하게 들릴지 모르겠지만, 예측이
> > 가능해야 한다는 것입니다. ^^ 표준에서는 동일한 random number seed 에
> > 대해서 동일한 난수열을 생성하도록 (동일한 난수열이 반복되도록) 요구
> > 하고 있습니다. 또한 다른 라이브러리 함수가 rand 나 srand 를 사용해서는
> > 안된다고 (물론, 그런것처럼 행동해야 한다고 - as if) 요구하고 있습니다.
> > 이는 난수를 사용한 계산이 (예를 들면) 디버깅 과정에서 프로그래머가
> > 원하는 행동을 해주길 바라는 경우를 위해서입니다.
> >
> > 예측 불가능하다고 생각되는 난수생성은 seed 에 영향을 주는 요소를 적절
> > 히 바꾸므로써 (time 을 사용한다든가.. 가장 흔한방법이죠) 이루어질 수
> > 있습니다.
>
> 질이 나쁘다는 것은 정말로 말 그대로 질이 나쁘다는 것입니다.
> 동일한 seed에서는 물론 동일한 난수열이 나와야 하는 것이 맞습니다.
> 그럼 질 좋은 난수란 뭘까요 ? 아직 명확한 정의를 본적은 없습니다.
> 하물며, 난수가 뭘까 정의하는 것은 확률이 무엇인가 정의하는 것만큼이나
> 어렵습니다.
> C에서 쓰는 rand()는 rule이 있기 때문에 분명 우리가 원하는 완전한(?)
> 난수는 될 수 없습니다.

C 에서 뿐만이 아닙니다. 의사난수 (pseudo-random number) 라는 용어의
의미 자체에 "가짜" 라는 의미가 있는 것도 이것 때문입니다. 의사난수란 어차피
"진짜" 난수가 아닙니다. 불규칙해 보이는 숫자의 열이 매우 긴 주기를 가지고
반복되는 것입니다. 따라서, 그 나열의 "부분"만을 보았을 때 충분히 난수라고
이야기할 수 있는 것입니다.

>
> 그럼 어떤 경우 질이 나쁠까요 ?
> 제가 경험한 바로는, rand()를 반복적으로 호출하여 배열값을 배정하고,
> 그것을 폭 512의 디지털 이미지로 만들어보았습니다. 그랬더니 희한하게도
> 이미지에 '빗살무늬'가 나타났습니다. 완전한 난수라면 이미지에서 어떤
> 기하학적인 모양을 발견할 일이 극히 드물겠지요. 하지만 저는, 그 무늬를
> 지우기가 더 어려웠습니다 !

rand() 를 간단히 구현해 보신다면 그 이유를 쉽게 아실 수 있을 겁니다.
의사난수열을 가지고 "완전한 난수" 를 논의한다는 것 자체가 nonsense
입니다.

> rand()의 알고리듬을 모르는 상태에서, 다른 방법으로 그 알고리듬의 특성을
> 쉽게 도출시킬 수 있다면, 그것은 좋은 rand()함수가 아닙니다. 이것은
> 아마도 수학에서 Algebra를 하시는 분들의 몫일 겁니다. 아마 약수를 포함하지
> 큰 소수를 찾는 일과 비슷하다고 생각하면 될 것 같습니다.
>
> >
> > >
> > >좀더 실용적(?) 말하자면, 왜 프로그래머는 환경에 상관 없이
> > >이식성 좋은 rand()를 써서 프로그래밍하면서 그 시스템에서 얻을 수 있는
> > >가장 좋은 질의 난수를 얻게 하면 좋을 텐데, BSD에서 프로그래밍을 하려면
> > >이식성(rand) 또는 난수의 질(random) 중 하나를 선택하게 만든 것일까요?
> > >
> >
> > random 함수가 어떠한 의미를 갖고 어떠한 행동을 하도록 정의되었는지는
> > 표준에서 상관할바가 아닙니다. (저또한 random 함수는 잘 사용하지 않으
> > 므로 구체적으로 어떠한 차이가 있는지는 모르겠습니다) 하지만, rand 함
> > 수는 제가 위에서 언급한 요구를 만족해야만 합니다. 그러다 보니 그 구현
> > 방법에 어느정도 제약이 가해지는 것이 사실입니다. 어떻게 구현하든 그건
> > implementor 의 몫이지만, 결과는 표준이 요구하는 바를 모두 만족해야
> > 합니다. 재밌는 것은 표준은 rand 와 srand 함수의 구현예를 싣고 있습니다.
> > 골치 아프게 이것저것 생각할 필요없이 몇가지 요소 (type 의 크기) 만을
> > 수정하고 그대로 베껴쓰는 것인 가장 속편한 방법이죠 :)
>
> rand()함수의 알고리듬이 표준으로 공개될 경우에 좋은 경우가 있습니다.
> 바로 암호화 개발 분야 입니다.
> 여기서는 서로 다른 시스템에서 두 개의 키를 생성해야 하는데, 두 시스템이
> 컴파일러 호환성을 가지지 않을 때에, rand()가 표준으로 되어있다는 것은
> 서로 같이 사용할 수 있는 rand() 함수를 새로 개발해야 한다는 부담을
> 없애줍니다.

표준에서 예로 든 rand() 의 구현은 어디까지나 example 이며, example 은
normative 가 아닙니다. 따라서, 어떠한 강제성도 가지지 않으며, 그야말로
"참고용" 입니다. 결국, rand() 의 구현은 C 표준에서 표준화하지 않은 것이며,
제가 적은 rand() 에 가해지는 요구는 "의사난수" 의 가장 일반적인 특성들을
의미하는 것입니다.

따라서, 초호화 난수이론을 도입해 rand() 를 구현하든, 표준의 예를 베끼든,
나오는 난수열이 "의사난수" 의 조건을 만족하고, 표준의 다른 부분을 만족
한다면 이는 conforming 한 구현입니다. C 표준은 거기까지만을 요구하고
있는 것입니다. 그 이상의 논의는 이 그룹에서 off-topic 이 되리라 생각합니다.

예를 들어, 프로그램이 rand() 함수를 호출하면, 제게 전화를 걸어, 임의로
작성한 (하지만, 일정한) 숫자열에서 호출한 차례대로 숫자를 불러주도록 하여,
그 숫자를 (음성인식으로 인식해 --;) 반환한다고 해도, 표준의 요구에 부합되는
것입니다.

>
> 참고로 type의 크기, 즉 비트 수가 바뀌면 호환되는 rand()함수라 볼 수 없겠
> 지요. 둘 중 하나는 표준을 벗어날 것입니다.

어떠한 표준을 말씀하시는 건지요?
C 표준은 이 세상의 모든 rand() 함수가 모두 호환되어야 한다고 이야기하지
않습니다. 그 implemenataion 에 한해서 그러한 요구가 만족되어야 한다고
강요하고 있는 것입니다. 어떠한 표준이 감히 C implementation 에게 이세상
모든 rand() 함수가 같은 seed 에 같은 난수열을 생성하도록 요구할 수 있죠?
그러한 표준이 있다면 분명한 "월권행위" 이며, ISO 를 개무시하지 않고는
(ISO 표준은 서로 관련되고 영향을 주는 표준에 상충하지 않도록 작성되고
있습니다) 그런 표준을 만들 수는 없습니다.

0 new messages