정수부/소수부 분리, 소수점 이하만 구하는 함수 예제: 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://sunnmoon.egloos.com/2218722
123.456789555 라는 실수에서
123 이 정수부이고
.456789555 가 소수부입니다. 정수부와 소수부를 분리하여 얻는 함수가
math.h 헤더 파일의
double modf(double x, double *ipart);
입니다. 소수부는 직접 반환하고, 정수부는 ipart 에 정수가 아닌 실수형으로 넣습니다.
정수부/소수부 분리, 소수점 이하만 구하는 함수 예제: modf() Function Example
파일명: 0.cpp
#include#include int main(void) { double integer, fraction; double n = 123.456789555; fraction = modf(n, &integer); printf("%.9f = %.f + %.15f\n", n, integer, fraction); return 0; }
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[출처] http://mwultong.blogspot.com/2006/12/c-get-fractional-part-only.htmlint main(void) { double n = 123.456789555; printf("%.9f = %d + %.15f\n", n, (int) n, n - (int) n); return 0; }
출처 : 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 |