#include<stdio.h>
#include<stdlib.h>
void f_rand(); // 0.0부터 1.0까지의 난수 반환 함수
int main(void)
{
f_rand();
}
void f_rand()
{
for (int i = 0; i < 5; i++)
{
printf("%f ", rand() / (double)RAND_MAX);
}
}
이번 포스팅은 0.0부터 1.0 난수를 반환하는 코드를 작성해보았습니다.
난수를 생성시에는 stdlib.h가 전처리기로 포함되어야 한다는 점!
기본적으로 난수를 만들어주는 rand()는 rand() % 최대값 +1로 많이 썼는데요.
하지만, 이 공식으로 정수 혹은 실수 난수 밖에 출력을 할 수 없었습니다.
그래서 여기서는 rand_max = rand()함수로 반환할 수 있는 최대값을 활용해 소수점 난수를 생성해보았습니다.
식은 rand()/(double)RAND_MAX
이와 같이 작성해주시면 0.0부터 1.0까지 소수점 난수가 출력되는 것을 확인하실 수 있습니다.
그럼 오늘도 즐거운 코딩!
[추가 참고하면 좋은 내용]
이 방식의 장점은, %를 이용한 방식보다 부하가 덜하며, 보다 랜덤한 수를 얻을 수 있다는 것이다.
예를 들어 0.0f~100.0f의 실수를 구하기 위한 공식을 두 방식에 적용해보자.
(rand()%10000 + 1) * 0.01f
rand() / (float)RAND_MAX * 100.0f
두가지 방법 모두 장점이 존재한다.
첫번째 방법인 (rand()%10000 + 1) * 0.01f 은, 최소 간격을 조절할 수 있다.
뒤에 곱한 0.01f가 최소 간격이 되는 것이다.
두번째 방법인 rand() / (float)RAND_MAX * 100.0f 은, 최대값 표기가 명확하며, 변화량이 매우 작은 랜덤 실수를 얻을 수 있다.
출처: https://gabble-workers.tistory.com/6 [게임공작소]
반응형
'코딩 | 개념 정리 > C' 카테고리의 다른 글
[C언어] 함수를 활용해 두 개의 정수 배수여부 판단하기 (0) | 2021.04.12 |
---|---|
[C언어] 입력값만큼 별표문자 그리기 (0) | 2021.04.11 |
[C언어] 함수를 활용해 난수 생성하기 (0) | 2021.04.10 |
[C언어] 함수를 활용해 사인값을 반환하기 (0) | 2021.04.10 |
[C언어] 함수를 활용해 소득세 계산하기 (0) | 2021.04.10 |