문제
내 생각,경우에는 사용자가 입력 t = 2.5
, 다음 추출 2 0.5 에 별도로 2 개의 다른 변수입니다.그러나 나는 할 수 없습니다.
는 코드는 다음과 같습니다:
$ export LT_LEAK_START=1.5
$ echo $LT_LEAK_START
1.5
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
double d;
time_t t;
long nsec;
d=strtod(getenv("LT_LEAK_START"), NULL);
t=(time_t)d;
nsec=d-(double)((time_t)d); // Extract fractional part as time_t always whole no.
printf("d = %lf\n",d);
printf("t = %u, nsec = %f\n",d,nsec);
}
출력:
# ./a.out
d = 1.500000
t = 0, nsec = 0.000000
해결책
의 출력이 끊어집니다.당신은 실제로 값의 d
에서 두 번 다음 코드:
nsec=d-(double)((time_t)d); // Extract fractional part as time_t always whole no.
printf("d = %lf\n",d);
printf("t = %u, nsec = %f\n",d,nsec);
를 작성하는 경우 이:
nsec=d-(double)((time_t)d); // Extract fractional part as time_t always whole no.
printf("d = %lf\n",d);
printf("t = %u, nsec = %f\n",t,nsec);
다음 당신 출력:
d = 1.500000
t = 1, nsec = 0.000000
그것은 지금 더 명확한이 있는 라운딩 오류가 있습니다.이 경우에,당신은 던져 모든 소수소 할당하여 0.5 nsec
, 이, long
.인 nsec
a float
대신 합니다.
다른 팁
또한 오래 가치를 저장하려고합니다.이것을 1000으로 곱하거나 nsec
를 두 배로 만듭니다.
nsec=d-(double)((time_t)d);
d가 1.5이면 오른쪽의 결과가 0.5 일 것이며, 이는 NSEC에 저장 될 때 암시 적으로 0으로 캐스팅됩니다.
당신은 노력하고 할당 .5
을 long
는 일어나기 위하여 려고 하고 있지 않다.
double d = 1.5;
int i = (int)d;
double j = d - (double)i;
printf("%d %f\n",i,j);
제휴하지 않습니다 StackOverflow