부동 소수점 연산

milkyblue의 이미지

#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로 계속 나오네요
임종규의 이미지

원인은 float 이 소수점 6자리까는 거의 정확히 저장되는데 그 이상 소수점은 지멋대로입니다.
float test = 1.2345678901231f;
해서 찍어보시면 아실껍니다.

double 을 쓰면 8자리까지는 무난히 저장되고 출력될겁니다.

/* How to Love Others */
while(GetDepth(Love) < Enough) DoLove();

milkyblue의 이미지

근데 double로 해도 안되네용

참 오묘하네요 이거 ㅎㅎ 나눌때 문제가 있는지 암튼 이상합니다 ㅠㅠ

double test = (375123441 / 10000000.0f);
이렇게 하면 소수점 밑은다 0이되네요.

milkyblue의 이미지

double latitude = ((double)375123441 + rand() % 3) / 10000000.0f;
감사합니다.