평화로운 일요일 아침입니다.

대충 위에서부터 시작하는 토론 부분을 흥미롭게 읽었습니다.

중간중간에 조금 제가 도움드릴만한 떡밥들을 정리해봄.



1. 디바이스 노이즈는 진짜로 랜덤한가?

이건 수학이라기보다는 물리인데...

고전적으로 기술 가능한 레벨의 노이즈는 물론 definite value지만 못맞추는거에 가까운게 맞고,

어느 정도 에너지 레벨 아래의 열 운동은 양자역학적으로 기술되야해서 랜덤합니다.

입자의 열 운동을 맞춘다는건 결국 어떤 시각의 운동량을 맞춘다는건데, 그게 definite value가 아니라서요.

중간에 확률로라도 기술되는거 아니냐고 하셨는데, 그게 랜덤이죠.

조금 더 샤프한 질문으로, 확률로"만" 기술되는게 확실하냐고 질문하실 수 있고...

그건 벨의 실험 결과(violation of CHSH ineq.) 덕분에 의외로 "그렇다"고 답변드릴 수 있겠습니다.



2. 난수 생성은 랜덤한가?

어떤 생성이냐에 따라서 다른데, 두분께서 서로 다른 것을 이야기하시는듯 합니다.


A. 진짜로 "아무 값"이나 필요한 경우 -> 디바이스 노이즈 사용, 양자역학 레벨로 랜덤


B. 동일 input에 동일 output이 보장되어야 하는 경우 (대표적으로 hashing) -> 랜덤 아님, 완벽하게 알고리즘대로 돌아감


C. "아무 값"이나 필요하지만 겁내 빠르게 생성해야하는 경우 -> 디바이스 노이즈나 유저 변수 등으로 seed 먹이고 이후 규칙대로 생성, 즉 초기값은 랜덤이나 알고리즘은 있음.




3. heap allocation은 랜덤하냐?

heap allocation은 allocation policy가 있으니 규칙대로 하지만, 유저 입력이 어떻게 주어질지도 모르는 것두 있고,

또 다른 코어나 디바이스가(특히 코어 사이클이) 어떻게 나오냐에 따라 영향을 받으므로, 위에서 C의 경우에 해당합니다.


근데 garbage collector이 있는 고급 언어에서 heap allocation/release는 시도 때도없이 하는 것이니,

random source가 계속 들어오는 상황이라고 보심 될 것 같습니다.

일단 allocation algorithm 내부로 진입하면 제가 아는 범위 내에서는 락 잡고 코어 단일로 코드대로 동작할겁니다. (*라이브러리 차이 있음, 고수분들 지적 환영)




결론: 두분이 서로 좀 다른걸 얘기하시는거 같은데 둘다 마따