0

私の考えは、ユーザーがを入力した場合t = 2.5、2つの異なる変数で2と0.5を別々に抽出することです。しかし、私はそれをすることができません。

コードは次のとおりです。

$ 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
4

3 に答える 3

1

出力が壊れています。あなたは実際にd次のコードで2回の値を書いています:

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

丸め誤差があることが明らかになりました。nsecこの場合、、に0.5を割り当てることにより、小数点以下の桁数をすべてキャストしますlong。代わりに作成nsecしてください。float

于 2011-03-28T12:08:21.530 に答える
0

発生しないに割り当てようとしてい.5ますlong

double d = 1.5;
int i = (int)d;
double j = d - (double)i;

printf("%d %f\n",i,j);
于 2011-03-28T12:02:50.383 に答える
0

また、小数値をlongに格納しようとしています。これに1000を掛けるかnsec、2倍にする必要があります。

nsec=d-(double)((time_t)d);

dが1.5の場合、右側の結果は0.5になり、nsecで格納されると、暗黙的に0にキャストダウンされます。

于 2011-03-28T12:09:06.250 に答える