정수부/소수부 분리, 소수점 이하만 구하는 함수 예제: modf()
Programming/C/C++ / 2011. 3. 17. 20:49
실수는 정수부(Integer Parts)와 소수부(Fractional Parts)로 이루어져 있습니다.
123.456789555 라는 실수에서
123 이 정수부이고
.456789555 가 소수부입니다. 정수부와 소수부를 분리하여 얻는 함수가
math.h 헤더 파일의
double modf(double x, double *ipart);
입니다. 소수부는 직접 반환하고, 정수부는 ipart 에 정수가 아닌 실수형으로 넣습니다.
파일명: 0.cpp
integer 변수에 정수부가 들어가는데 정수형이 아닌 실수형으로 들어갑니다. 그래서 %.f 이런 포맷 지정자를 사용하여 정수로 출력했습니다.
fraction 변수에는 소수부가 들어갑니다.
컴파일 및 실행 결과:
정수부와 소수부가 나누어졌습니다.
그런데 소수부가 그리 정밀하게 구해지지는 않았습니다.
다음과 같이 할 수도 있습니다:
[출처] http://mwultong.blogspot.com/2006/12/c-get-fractional-part-only.html
출처 : http://sunnmoon.egloos.com/2218722
123.456789555 라는 실수에서
123 이 정수부이고
.456789555 가 소수부입니다. 정수부와 소수부를 분리하여 얻는 함수가
math.h 헤더 파일의
double modf(double x, double *ipart);
입니다. 소수부는 직접 반환하고, 정수부는 ipart 에 정수가 아닌 실수형으로 넣습니다.
정수부/소수부 분리, 소수점 이하만 구하는 함수 예제: modf() Function Example
파일명: 0.cpp
- #include <stdio.h>
- #include <math.h>
- int main(void) {
- double integer, fraction;
- double n = 123.456789555;
- fraction = modf(n, &integer);
- printf("%.9f = %.f + %.15f\n", n, integer, fraction);
- return 0;
- }
- </math.h></stdio.h>
integer 변수에 정수부가 들어가는데 정수형이 아닌 실수형으로 들어갑니다. 그래서 %.f 이런 포맷 지정자를 사용하여 정수로 출력했습니다.
fraction 변수에는 소수부가 들어갑니다.
컴파일 및 실행 결과:
D:\Z>cl /nologo 0.cpp && 0.exe
0.cpp
123.456789555 = 123 + 0.456789555000000
D:\Z>
0.cpp
123.456789555 = 123 + 0.456789555000000
D:\Z>
정수부와 소수부가 나누어졌습니다.
그런데 소수부가 그리 정밀하게 구해지지는 않았습니다.
modf 함수 없이, 실수에서 소수부 구하기
다음과 같이 할 수도 있습니다:
- #include <stdio.h>
- int main(void) {
- double n = 123.456789555;
- printf("%.9f = %d + %.15f\n", n, (int) n, n - (int) n);
- return 0;
- }
- </stdio.h>
출처 : http://sunnmoon.egloos.com/2218722
반응형
'Programming > C/C++' 카테고리의 다른 글
strncmp 와 memcmp (0) | 2011.07.14 |
---|---|
fmod double형 나눗셈의 나머지 구하기 (0) | 2011.03.24 |
이름공간(namespace)의 함정. (0) | 2011.03.13 |
카메라 흔들기 (0) | 2011.03.05 |
[게임코드]손쉽게 카메라 흔들기 (0) | 2011.03.04 |