何をtime(NULL)
返しますか?ドキュメントを考えると、次のコードを実行すると、エポックからの秒数が返されると想定していました。
#include <iostream>
#include "Time.h"
#include "Math.h"
int main () {
double curT = 0;
double curJ = 0;
time_t curTtimeT = 0;
double curJtimeT = 0;
//run indefinitely... use a debugger you can stop :-)
for (double j = 0; j < 2000000000; j++) {
//get the current time
curT = time(NULL);
curTtimeT = time(NULL);
//check if current time equals previous time
if (time(NULL) != curT) {
//output time and approx. "time" through iteration
std::cout << "Time match with doubles:\t" << curT << "\tdeltaJ:\t\t\t" << (j - curJ) <<std::endl;
curT = time(NULL);
curJ = j;
}
if (time(NULL) != curTtimeT) {
//output time and approx. "time" through iteration
std::cout << "Time match with time_t:\t\t" << curTtimeT << "\t\tdeltaJtimeT:\t\t" << (j - curJtimeT) <<std::endl;
curTtimeT = time(NULL);
curJtimeT = j;
}
}
return 0;
}
次の結果が得られます (実行間でスキップにパターンがあるようには見えません)。
Time match with time_t: 1348873002 deltaJtimeT: 290842
Time match with doubles: 1.34887e+09 deltaJ: 2.41017e+06
Time match with doubles: 1.34887e+09 deltaJ: 1.08409e+06
Time match with doubles: 1.34887e+09 deltaJ: 2.16587e+06
Time match with time_t: 1348873007 deltaJtimeT: 5.36928e+06
Time match with doubles: 1.34887e+09 deltaJ: 1.08696e+06
Time match with time_t: 1348873008 deltaJtimeT: 1.08696e+06
Time match with doubles: 1.34887e+09 deltaJ: 1.08534e+06
Time match with doubles: 1.34887e+09 deltaJ: 3.18296e+06
...
Time match with time_t: 1348873122 deltaJtimeT: 2.16217e+06
Time match with doubles: 1.34887e+09 deltaJ: 6.42553e+06
Time match with doubles: 1.34887e+09 deltaJ: 1.08727e+06
Time match with doubles: 1.34887e+09 deltaJ: 2.14147e+06
Time match with doubles: 1.34887e+09 deltaJ: 1.04733e+06
Time match with time_t: 1348873130 deltaJtimeT: 8.42965e+06
注: このdeltaJ
出力を使用して、コンソールが実際にこのループから結果を出力するタイミングに関して、明確な視覚的な違いをもう少し数値的に示しています。
double
明らかに、これはエポックからの秒数を一貫して返しているようには見えません。代わりに、1 秒あたりの両方で1 行に非常に近い非常に一貫した出力を確認できるからtime_t
です。1348873002
代わりに、との間の範囲全体を見逃しています1348873007
- これらの値はどれも 経由で見つからないようtime(NULL)
です。これらのギャップは、このループのランタイム全体を通して一貫して表示されます。
さらに、数秒間出力されないこともあります (1348873122
との間のギャップを参照してください1348873130
)。
リアルタイムの 1 秒ごとに、出力に両方の変数タイプの 1 つのエントリが表示されない理由がわかりません。代わりに、time(NULL)
エポックからの秒数を一貫して返しないようで、実際にはいくつかの値をスキップします。
私は何が欠けていますか?
Snow Leopard 上の X-Code 3.2.5 の 2.4GHz デュアルコア Macbook Pro でこれらのテストを実行しています (おそらく、この問題は私のシステムに固有のものです)?