부동 소수점 연산
글쓴이: milkyblue / 작성시간: 목, 2011/04/28 - 10:52오전
#include <stdio.h> #include <time.h> #include <stdlib.h> int main() { srand((unsigned int)time(NULL)); float latitude; latitude = (375123441 + ((rand() ) % 3)) / 10000000.0f; //latitude = ((rand() ) % 3) / 10000000.0f; printf("latitude : %.8f\n", latitude); return 0; }
보시면 하고싶은게 37.5123441, 37.5123442, 37.5123443 이렇게 세개의 값이 랜덤하게 나오게 출력하고싶습니다.
결과를 보면 37.5123444로 계속 나오네요
Forums:
원인은 float 이 소수점 6자리까는 거의 정확히
원인은 float 이 소수점 6자리까는 거의 정확히 저장되는데 그 이상 소수점은 지멋대로입니다.
float test = 1.2345678901231f;
해서 찍어보시면 아실껍니다.
double 을 쓰면 8자리까지는 무난히 저장되고 출력될겁니다.
/* How to Love Others */
while(GetDepth(Love) < Enough) DoLove();
답변감사합니다.
근데 double로 해도 안되네용
참 오묘하네요 이거 ㅎㅎ 나눌때 문제가 있는지 암튼 이상합니다 ㅠㅠ
double test = (375123441 / 10000000.0f);
이렇게 하면 소수점 밑은다 0이되네요.
해결 했습니다.
double latitude = ((double)375123441 + rand() % 3) / 10000000.0f;
감사합니다.
댓글 달기