C言語でgettimeofdayを使っているのですが、出力が期待した値でないときがあるので、解決法をご教示いただけたらと思います。
C言語で出力結果を小数点以下6桁で出したい、というものです。
以下は骨組みを簡略化したコードとなります。問題が起きているほぼそのままの実装です。
また、このコードでは正常に動きますが、私の手元にある少々複雑なコードでは、%06luとしているのに出力が9.18446744073709270220となって、小数点以下6桁で切れていないときがあります。
何が原因と考えられますか。
C
1#include <stdio.h> 2#include <sys/time.h> 3#include <unistd.h> 4 5struct timeval tv; 6 7struct struct_sec { 8 time_t time_sec; 9}; 10 11struct struct_usec { 12 suseconds_t time_usec; 13}; 14 15static struct struct_sec struct_sec; 16static struct struct_usec struct_usec; 17 18int main(int argc, char **argv) { 19 struct_sec.time_sec = 0; 20 struct_usec.time_usec = 0; 21 22 gettimeofday(&tv, NULL); 23 time_t time_before_sec, time_after_sec; 24 suseconds_t time_before_usec, time_after_usec; 25 time_before_sec = tv.tv_sec; 26 time_before_usec = tv.tv_usec; 27 28 /* ここになんかの処理 この処理の時間を測る*/ 29 sleep(1); // 今回はsleep 30 31 gettimeofday(&tv, NULL); 32 33 time_after_sec = tv.tv_sec; 34 time_after_usec = tv.tv_usec; 35 36 time_t time_1 = time_after_sec - time_before_sec; 37 suseconds_t time_2 = time_after_usec - time_before_usec; 38 39 struct_sec.time_sec += time_1; // 今回は1つの和だが、実際は何回か足して合計時間を測る 40 struct_usec.time_usec += time_2; 41 42 printf("%ld.%06lu\n", struct_sec.time_sec, struct_usec.time_usec); // この出力が小数点以下6桁を指定しているのにそうじゃないときがある。 43 44 return 0; 45}
どうかよろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/26 03:00