선형 합동 생성기
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
선형 합동 생성기(LCG)는 1951년 레머에 의해 처음 제안된 의사 난수 생성기(PRNG)의 한 종류이다. LCG는 점화식 형태로 표현되며, A, B, M은 상수이고, X0는 난수의 씨앗이다. LCG는 계산이 간단하고 메모리 사용량이 적지만, 매개변수 선택에 따라 난수열의 품질이 크게 달라지며, 몬테 카를로 시뮬레이션이나 암호학적 안전성이 필요한 경우에는 부적합할 수 있다. LCG의 품질은 매개변수 a, c, m의 선택에 달려 있으며, 헐-도벨 정리는 LCG가 최대 주기를 갖기 위한 조건을 제시한다. LCG는 다양한 응용 분야에 사용되며, 다른 난수 생성기와의 비교를 통해 장단점을 파악할 수 있다.
더 읽어볼만한 페이지
- 유사난수 생성기 - RC4
RC4는 로널드 라이베스트가 1987년에 설계한 스트림 암호 알고리즘으로, 과거 널리 사용되었으나 보안 취약점 때문에 현재는 안전하지 않은 암호로 간주된다. - 유사난수 생성기 - 메르센 트위스터
메르센 트위스터는 마츠모토 마코토와 니시무라 타쿠지가 개발한 유사난수 생성 알고리즘으로, 긴 주기와 고차원 균등 분포를 특징으로 하지만 암호학적으로 안전하지 않고 상태 크기가 크다는 단점이 있어 다양한 변종이 개발되었다. - 모듈러 산술 - 이산 로그
이산 로그는 유한군에서 이산 거듭제곱의 지수를 찾는 역함수로, 소수 p를 법으로 하는 정수 모듈러 곱셈 그룹에서 계산적으로 풀기 어려운 문제이며, 현대 암호 시스템의 안전성 기반이지만 양자 알고리즘으로 효율적 해결이 가능하여 양자 내성 암호 연구가 필요하다. - 모듈러 산술 - 중국인의 나머지 정리
중국인의 나머지 정리는 여러 개의 연립 합동식의 해 존재성과 유일성에 대한 정리이며, 정수론, 대수학, 암호학 등 다양한 분야에 응용된다.
선형 합동 생성기 | |
---|---|
개요 | |
유형 | 의사 난수 생성기(PRNG) |
개발자 | 더머 H. 르머 |
개발 연도 | 1949년 |
장점 | 속도 구현 용이성 결정론적 긴 주기 양호한 통계적 속성 (적절히 선택된 경우) |
단점 | 예측 가능성 짧은 주기로 인한 결함 일부 애플리케이션에 부적합 |
정의 | |
공식 | X_(n+1) = (aX_n + c) mod m |
X_(n+1) | 난수열의 다음 값 |
X_n | 난수열의 현재 값 |
a | 승수 |
c | 증분 |
m | 계수 |
매개변수 선택 | |
m | 주기의 길이, 일반적으로 2의 거듭제곱 (컴퓨터 연산에 효율적) |
a | 전체 주기를 얻기 위한 특정 조건 존재 |
c | 0이 아닌 값, 최대 주기를 위해 m과 서로소여야 함 |
역사 및 응용 | |
최초 사용 | ENIAC에서 사용 |
언어 지원 | C (rand()) C++ (rand()) Java (java.util.Random) glibc Visual Basic |
변형 | |
곱셈 합동 생성기 | c = 0인 경우 |
르머 난수 생성기 (페르미안 난수 생성기) | m은 소수 |
혼합 합동 생성기 | c ≠ 0인 경우 |
장주기 생성기 | |
예시 | Mersenne Twister WELL997 Xorshift |
암호학적 안전성 | |
안전하지 않음 | 선형 합동 생성기의 예측 가능성으로 인해 암호학적으로 안전하지 않음 |
2. 역사
선형 합동 생성기는 1951년 레머가 처음으로 제시하였고,[2] 1958년 W. E. 톰슨과 A. 로텐버그가 이를 확장하여 발표하였다.[3][4] 1970년대에 널리 사용되었던 RANDU는 잘못된 매개변수 선택으로 인해 난수의 품질에 심각한 문제가 있었던 대표적인 사례이다.
선형 합동 생성기는 다음과 같은 점화식 형태로 표현된다.
선형 합동 생성기는 주기성을 가지며, 이는 생성되는 난수열이 특정 패턴을 반복한다는 것을 의미한다. 주기는 최대 m이 될 수 있으며, 다음 조건을 만족할 때 최대 주기를 갖는다.[9][10]
m
선형 합동 생성기는 계산이 간단하여 빠르게 난수를 생성할 수 있고, 메모리 사용량이 적다는 장점이 있지만, 난수의 품질에 여러 문제점이 있어 사용에 주의해야 한다.
선형 합동 생성기(LCG)는 속도가 빠르고 메모리를 적게 차지하여(주로 32비트 또는 64비트) 여러 독립적인 스트림 시뮬레이션에 유용하다. 하지만 암호학적 용도로는 부적합하며, 암호학적으로 안전한 의사 난수 생성기를 사용해야 한다.[30]
선형 합동 생성기(LCG)는 몬테 카를로 시뮬레이션이나 암호학 목적에는 적합하지 않다. 생성되는 난수들 사이에 상관 관계가 존재하고, 생성된 난수를 알면 이후의 난수를 예측할 수 있기 때문이다. 마서글리아 효과에 따라, LCG가 생성하는 숫자들을 n개씩 짝지어 n차원 공간에 점을 찍으면 최대 m1/n개의 초평면 위에 위치하게 된다. m이 2의 거듭제곱일 경우, 생성된 난수열의 하위 비트는 상위 비트보다 상관관계가 더 강하다.
스티븐 K. 파크와 키스 W. 밀러는 연구 조사에서 "최저 기준"으로 다음 선형 합동 생성기를 제시하며, 더 나은 선택지가 없다면 직접 제작하는 대신 이것을 사용해야 한다고 했다.[41]
선형 합동 생성기는 최대 주기를 갖도록 매개변수를 설정하더라도 높은 품질의 난수를 생성하지 못한다. 생성되는 난수들 사이에 상관관계가 존재하여 몬테 카를로 시뮬레이션에는 부적합하며, 암호학적 목적으로도 사용할 수 없다. 생성된 난수들로 n차원 공간에 점을 찍으면 마서글리아 효과에 따라 점들이 특정 초평면 위에 놓이게 된다. m이 2의 거듭제곱이면 하위 비트의 상관관계가 더 강해진다.
[1]
논문
Computationally easy, spectrally good multipliers for congruential pseudorandom number generators
https://www.research[...]
2022-02
3. 작동 원리
:
위 식에서 은 난수의 씨앗이며, 여기에 숫자를 대입하면 이 얻어진다. 를 생성할 경우에는 을 사용한다. 이후에도 마찬가지 방식으로 진행한다.
예를 들어, 상수 A = 3, B = 5, M = 13, 난수의 씨앗 = 8로 하면 (위의 식에서는 Xn+1을 좌변에 두었지만, 이번에는 편의상 우변에 둔다),
:
다음 난수를 생성할 때는 이전에 생성된 난수(이번에는 3)를 사용하여,
:
같은 방식으로,
:
이 된다.
일반적으로 컴퓨터에서는 나눗셈 및 나머지 연산이 매우 느리기 때문에 이 이나 같이 정수의 크기에 맞는 나눔수를 흔히 사용한다. 자주 사용되는 다음 생성기는 그렇지 않은 한 예이다.
:
위 생성기는 C99 코드로 다음과 같이 표현할 수 있다.
```c
#include
uint32_t lcg_rand(uint32_t a)
{
return ((uint64_t)a * 279470273) % 4294967291;
}
```
Numerical Recipes in C는 다음 형태의 선형 합동 생성기를 권장했다.
:
볼랜드 터보 C에 포함된 `rand()` 함수는 다음 식을 사용하되, 상위 16비트만을 반환했다.
:
매우 나쁜 난수열을 생성하는 것으로 알려진 RANDU 루틴은 다음 수식을 사용한다.
:
4. 주기
조건 설명 과 는 서로소이다. 과 의 최대공약수는 1이다. 은 의 모든 소인수로 나누어 떨어진다. 은 을 나누는 모든 소수로 나누어 떨어진다. 이 4로 나누어 떨어지면 은 4로 나누어 떨어진다. 이 4의 배수이면, 도 4의 배수이다.
이러한 세 가지 요구사항을 헐-도벨 정리(Hull–Dobell Theorem)라고 한다.
LCG의 장점은 적절한 매개변수를 선택하면 알려져 있고 긴 주기를 얻을 수 있다는 것이다. 하지만 주기가 너무 짧으면 의사 난수 생성기로서 치명적인 결함이 될 수 있다.[5]
5. 매개변수 선택
곱셈기
a증분
crand() 또는 Random(L)에서 시드의 출력 비트 ZX81 65537 75 74 Numerical Recipes 4294967296 1664525 1013904223 Borland C/C++ 2147483648 22695477 1 rand()의 비트 30..16, lrand()의 30..0 glibc (GCC 사용)[12] 2147483648 1103515245 12345 비트 30..0 ANSI C: Watcom, Digital Mars, CodeWarrior, IBM VisualAge C/C++[13]
C90, C99, C11: ISO/IEC 9899의 제안,[14] C172147483648 1103515245 12345 비트 30..16 Borland Delphi, Virtual Pascal 4294967296 134775813 1 (seed × L)의 비트 63..32 Turbo Pascal 4.0 et seq.[15] 4294967296 134775813 (808840516) 1 Microsoft Visual/Quick C/C++ 2147483648 214013 (343FD16) 2531011 (269EC316) 비트 30..16 Microsoft Visual Basic (6 및 이전 버전)[16] 16777216 1140671485 (43FD43FD16) 12820163 (C39EC316) Native API의 RtlUniform[17][18] 2147483647 4294967278 (7FFFFFED16) 4294967236 (7FFFFFC316) Apple CarbonLib, C++11의 minstd_rand0
,[19] MATLAB의 v4 레거시 생성기 mcg16807[20]2147483647 16807 0 MINSTD 참조 C++11의 minstd_rand
[19]2147483647 48271 0 MINSTD 참조 Donald Knuth의 MMIX {{cvt|18446744073709551616|} } || 6364136223846793005 || 1442695040888963407 ||
|-
| Newlib[21] || || 6364136223846793005 || 1 || 비트 62..32 (16비트 정수의 경우 46..32)
|-
| Musl || || 6364136223846793005 || 1 || 비트 63..33
|-
| VMS의 '''MTH$RANDOM''',[22] 이전 버전의 glibc || 4294967296 || 69069 (10DCD16) || 1 ||
|-
| Java의 java.util.Random, POSIX [ln]rand48, glibc [ln]rand48[_r]|| 281474976710656 || 25214903917 (5DEECE66D16) || 11 || 비트 47..16
|-
|random0
[23][24][25][26][27]
|| 134456 = 8 || 8121 || 28411 ||
|-
| POSIX[28] [dejm]rand48, glibc [dejm]rand48[_r] || 281474976710656 || 25214903917 (5DEECE66D16) || 11 || 비트 47..0 또는 비트 47..15, 필요에 따라
|-
| cc65[29] || 8388608 || 65793 (1010116) || 4282663 (41592716) || 비트 22..8
|-
| cc65 || 4294967296 || 16843009 (101010116) || 826366247 (3141592716) || 비트 31..16
|-
| cc65 || 4294967296 || 16843009 (101010116) || 3014898611 (B3B3B3B316) || 이전에 비트 31..16, 현재 비트 31..16 XOR 비트 14..0
|- style="border-top:2px solid;"
| ''이전에 흔하게 사용됨:'' RANDU[6] || 2147483648 || 65539 || 0 ||
|}
LCG는 생성하는 값의 모든 비트를 항상 사용하는 것은 아니다. 예를 들어 Java 구현은 각 반복에서 48비트 값으로 작동하지만 가장 중요한 32비트만 반환한다. 이는 상위 비트가 하위 비트보다 더 긴 주기를 가지기 때문이다.
스티븐 K. 파크(Stephen K. Park)와 키스 W. 밀러(Keith W. Miller)가 제시한 "최저 기준" LCG는 다음과 같다.
: [41]
자주 구현되는 또 다른 LCG는 다음과 같다.
: [42]
이 LCG는 하위 비트에서 규칙성이 나타나는 문제가 있을 수 있다.
6. 장단점
장점:
단점:
LCG는 임베디드 시스템영어과 같이 메모리가 극도로 제한된 환경이나, 비디오 게임 콘솔처럼 난수의 질이 크게 중요하지 않은 경우에는 유용하게 사용될 수 있다. 그러나 대부분의 경우에는 메르센 트위스터와 같이 더 품질이 좋은 난수 생성기를 사용하는 것이 권장된다.
6. 1. 장점
선형 합동 생성기(LCG)는 계산이 간단하고 빨라, 속도가 중요한 환경에서 유리하다. 또한 메모리 사용량이 매우 적어, 임베디드 시스템영어과 같이 메모리가 제한된 환경에 적합하며, 여러 개의 독립적인 스트림을 시뮬레이션하는 데 유용하게 사용될 수 있다.
구현이 용이하여 다양한 환경에서 사용할 수 있다는 장점도 있다. 특히, 저기능 프로세서에서도 효율적으로 구현할 수 있는데, 이는 시프트 연산, 덧셈, 뺄셈 등의 조합으로 곱셈을 대체하고, 합동 산술을 이용하여 식을 변형함으로써 가능하다. 전용 회로로도 쉽게 구현할 수 있다.
LCG의 주요 장점은 다음과 같다.장점 계산이 간편하고 빠르다. 메모리 사용량이 적다. 구현이 쉬워 다양한 환경에서 사용 가능하다.
6. 2. 단점
선형 합동 생성기는 최대 주기를 갖도록 매개변수를 선택하더라도 완벽한 품질의 난수를 생성하지 못한다. 예를 들어, 생성되는 난수들 사이에 상관 관계가 존재하여 몬테 카를로 시뮬레이션에 적합하지 않다. 또한 마지막으로 생성된 난수를 알면 이후 생성될 난수를 예측할 수 있어 암호 목적으로도 사용할 수 없다.[5]
선형 합동 생성기를 사용할 때 주의해야 할 점은 다음과 같다.
이러한 단점에도 불구하고, LCG는 메모리 사용량이 적고 속도가 빠르다는 장점 때문에 제한적인 환경에서 사용될 수 있다. 그러나 대부분의 경우 메르센 트위스터와 같은 더 উন্নত된 난수 생성기를 사용하는 것이 좋다.
LCG는 암호학적으로 안전한 의사 난수 생성기가 아니므로 암호화에 사용해서는 안 된다.
과학 기술 시뮬레이션 등에서 대량의 난수를 사용할 때는 주기의 짧음(예: 32비트에서는 최대 주기라도 약 40억)이 문제가 될 수 있다.
일부 프로그래밍 언어의 난수 생성 함수(예: rand(3), `java.util.Random`)는 선형 합동법을 사용하므로, 사용 시 주의해야 한다. 예를 들어, 주사위 눈을 생성할 때 `rand() % 6 + 1`과 같이 사용하면 하위 비트의 규칙성이 그대로 나타날 수 있다.
7. 응용 분야
LCG는 몇 가지 약점이 있지만, 충분히 큰 상태를 가진 LCG는 엄격한 통계적 테스트를 통과할 수 있다. 예를 들어, 264 모듈로 LCG는 높은 32비트를 반환하여 TestU01의 SmallCrush 스위트를 통과하며, 96비트 LCG는 BigCrush 스위트를 통과한다.[30]
32비트 난수 생성기는 결과 후에 이전 출력을 복제할 수 있지만, 모든 PRNG는 출력이 완전히 잘리지 않은 상태이면 전체 주기가 경과할 때까지 중복을 생성하지 않는다.[31] 따라서 모든 PRNG는 필요한 출력 횟수의 제곱보다 긴 주기를 가져야 하며, 현대 컴퓨터에서는 264 이상의 주기가 필요하다.
LCG의 한 가지 결함은 n차원 공간에서 점을 선택할 때, 점이 최대 초평면에 놓이게 된다는 마르살리아의 정리이다.[32] 스펙트럼 테스트는 LCG의 품질을 평가하는 데 사용된다.
또 다른 결함은 ''m''이 2의 거듭제곱일 때 하위 비트의 주기가 짧다는 것이다. 이는 큰 모듈러스를 사용하고 상태의 가장 중요한 비트를 사용하여 완화할 수 있다.
LCG는 메모리가 제한된 임베디드 시스템이나 비디오 게임 콘솔과 같은 환경에서 유용할 수 있다. 그러나 몬테 카를로 시뮬레이션과 같이 고품질 난수가 필요한 경우에는 LCG 사용에 신중해야 하며, 필요한 난수 표본의 세제곱보다 큰 모듈러스를 사용해야 한다.
8. 다른 난수 생성기와의 비교
이러한 문제점들 때문에, 대부분의 경우 메르센 트위스터와 같은 다른 생성기를 사용하는 것이 더 좋다. 다만, 메르센 트위스터는 2킬로바이트 정도의 메모리를 요구하므로, 메모리가 제한된 임베디드 환경에서는 LCG가 유리할 수 있다.
선형 궤환 시프트 레지스터(LFSR)는 GF(2)[x]에서의 연산에 기반한 또 다른 의사 난수 생성 방식이다. 이는 모든 비트가 전체 주기를 갖는다는 장점이 있지만, 2k에 대한 산술 연산에서 발생하는 하위 비트의 약점을 갖는다.[35] xorshift 생성기와 메르센 트위스터가 이 계열의 예시다.[36] 지연 피보나치 생성기도 이 범주에 속한다.
TestU01의 선형 복잡성 테스트를 통해 LFSR 구조를 쉽게 감지할 수 있다.[37] xoshiro256 및 순열 합동 생성기와 같이 비선형 출력 혼합 함수를 추가하면 통계 테스트 성능을 향상시킬 수 있다.
PRNG의 또 다른 구조는 간단한 재귀 함수와 강력한 출력 혼합 함수를 결합한 것이다. 카운터 모드 블록 암호와 [http://prng.di.unimi.it/splitmix64.c SplitMix64] 등이 여기에 해당한다.
다중 재귀 생성기는 LCG와 유사하지만, 더 큰 주기를 생성할 수 있다.
고품질 의사 난수를 생성하는 강력한 기술은 서로 다른 구조의 두 개 이상의 PRNG를 결합하는 것이다. 예를 들어, LFSR과 LCG의 합(KISS 또는 xorwow)은 좋은 결과를 얻을 수 있다.
9. 예제 코드
:
C 언어 구현 예시는 "comp.lang.c FAQ list · Question 13.15"의 답변에서 찾아볼 수 있다.[41]
출처는 불분명하지만 자주 구현되는 또 다른 방식은 다음과 같다.[42]
:
이 방식은 POSIX의 rand 해설에 참고용 예시로 포함되어 있으며[42], 2017년 현재 웹 콘텐츠에서도 가끔 볼 수 있다. (예: Rosetta Code의 선형 합동법 샘플에 "BSD formula"라는 이름으로 표시) 그러나 이 방식은 Park & Miller의 방식보다 품질이 떨어진다. 특히 최하위 비트는 주기가 2, 다음 비트는 주기가 4, 다음 비트는 주기가 8과 같이 하위 자릿수에 완전한 규칙성이 나타난다. 이 방식은 적어도 BSD보다 오래되었으며, Unix 버전 7의 /usr/src/libc/gen/rand.c에서 찾아볼 수 있다.
9. 1. C언어
《Numerical Recipes in C》에서는 다음 형태의 선형 합동 생성기를 사용했다.
:
볼랜드 터보 C에 포함된 `rand()` 함수는 다음 식을 사용하되, 상위 16비트만을 반환했다.
:
다음은 C99 코드로 표현된 생성기이다.
#include
uint32_t lcg_rand(uint32_t a)
{
return ((uint64_t)a * 279470273) % 4294967291;
}
다음은 "comp.lang.c FAQ list · Question 13.15"의 답변에 있는 C 언어 구현 예시이다.[41]
:
다음 식은 출처는 불분명하지만 자주 구현되는 방식이다.[42]
:
9. 2. 파이썬
다음은 파이썬으로 구현된 생성기 형태의 LCG이다.
```python
from collections.abc import Generator
def lcg(modulus: int, a: int, c: int, seed: int) -> Generator[int, None, None]:
"""선형 합동 생성기."""
while True:
seed = (a * seed + c) % modulus
yield seed
10. 추가 정보
대부분의 경우 메르센 트위스터와 같은 생성기가 더 우수하지만, 메모리 제약이 있는 임베디드 환경에서는 선형 합동 생성기가 유리할 수 있다.
선형 합동 생성기를 변형한 여러 생성기들이 존재한다. 큰 최소 공배수를 갖는 서로 다른 주기의 LCG 출력을 합산하는 방식(예: 위치만-힐 생성기[33][34])이나, 조지 마르살리아의 가산 캐리 및 감산 캐리 PRNG, 곱셈 캐리 PRNG 등이 있다. 순열 합동 생성기는 출력 변환을 통해 하위 비트 문제를 개선한 생성기이다.
참조
[2]
논문
Mathematical methods in large-scale computing units
1951
[3]
논문
A Modified Congruence Method of Generating Pseudo-random Numbers
1958
[4]
논문
A New Pseudo-Random Number Generator
1960
[5]
conference
History of Uniform Random Number Generation
https://www.iro.umon[...]
2017-07-13
[6]
서적
Numerical Recipes in Fortran 77: The Art of Scientific Computing
[7]
웹사이트
Computer Systems Performance Analysis Chapter 26: Random-Number Generation
http://www.cse.wustl[...]
2010-07-09
[8]
웹사이트
Schrage's Method
http://home.earthlin[...]
2006-09-11
[9]
논문
Random Number Generators
http://chagall.med.c[...]
1962-07
[10]
서적
System Modeling and Simulation
John Wiley & Sons, Ltd.
[11]
웹사이트
Random Numbers: Nothing Left to Chance
https://www.ams.org/[...]
American Mathematical Society
2008-03
[12]
문서
Implementation in glibc-2.26 release.
https://sourceware.o[...]
[13]
서적
A collection of selected pseudorandom number generators with linear structures
http://citeseer.ist.[...]
1997-08-21
[14]
웹사이트
Last public Committee Draft from April 12, 2011
http://www.open-std.[...]
[15]
논문
The random number generators of the Turbo Pascal family
1991-08
[16]
웹사이트
How Visual Basic Generates Pseudo-Random Numbers for the RND Function
http://support.micro[...]
Microsoft
2004-06-24
[17]
문서
In spite of documentation on MSDN, RtlUniform uses LCG, and not Lehmer's algorithm, implementations before Windows Vista are flawed, because the result of multiplication is cut to 32 bits, before modulo is applied
[18]
웹사이트
WINE source identifier search: RtlUniform
https://source.wineh[...]
[19]
웹사이트
ISO/IEC 14882:2011
http://www.iso.org/i[...]
ISO
2011-09-02
[20]
웹사이트
Creating and Controlling a Random Number Stream
https://www.mathwork[...]
MathWorks
[21]
웹사이트
rand, srand—pseudo-random numbers
https://sourceware.o[...]
[22]
웹사이트
GNU Scientific Library: gsl_rng_vax
https://www.gnu.org/[...]
[23]
문서
Example 6.4 – Random Number Generator
https://books.google[...]
[24]
문서
Example 6.4 – Random Number Generator
https://books.google[...]
[25]
문서
random0
http://www.udel.edu/[...]
[26]
문서
Introduction to Fortran 90/95
https://books.google[...]
[27]
문서
'Module': A Major Feature of the Modern Fortran
[28]
문서
The Open Group Base Specifications Issue 7
[29]
웹사이트
rand.s
https://github.com/c[...]
[30]
간행물
PCG: A Family of Simple Fast Space-Efficient Statistically Good Algorithms for Random Number Generation
http://www.pcg-rando[...]
Harvey Mudd College
2014-09-05
[31]
논문
On the adequacy of pseudo-random number generators (or: How big a period do we need?)
https://doi.org/10.1[...]
1986-06
[32]
논문
Random Numbers Fall Mainly in the Planes
https://www.pnas.org[...]
1968-09
[33]
conference
On the Lattice Structure of the Add-with-Carry and Subtract-with-Borrow Random Number Generators
https://core.ac.uk/d[...]
Kyoto University
1993-10
[34]
conference
Analysis of Add-with-Carry and Subtract-with-Borrow Generators
http://www.informs-s[...]
1992-12
[35]
서적
The Nature of Mathematical Modeling
https://archive.org/[...]
Cambridge University Press
[36]
논문
Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator
https://pdfs.semanti[...]
1998-01
[37]
간행물
Randomness Requirements for Security
Internet Engineering Task Force
2005-06
[38]
문서
スペインの雨
[39]
웹사이트
Random Numbers Fall Mainly in the Planes
http://www.jstor.org[...]
[40]
문서
このタイトルで書かれた文献の著者は George Marsaglia(:en:George Marsaglia)だが、ドナルド・クヌースはこの表現の出典を(The Art of Computer Programmingにて)ウォレス・ギヴンスとしている。
[41]
웹사이트
comp.lang.c FAQ list · Question 13.15
http://c-faq.com/lib[...]
[42]
웹사이트
http://pubs.opengrou[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com