そのため、その日の秒を取得できる方法が必要だったので、fmod()
& gettimeofday()
(Mac OSX) をいじりました。ただし、途中でいくつかの奇妙な結果になりました。
#include <iostream>
#include <sys/time.h>
#include <cmath>
class A {
public:
static float secondOfDayFmodF()
{
timeval t;
gettimeofday(&t, NULL);
return fmodf((t.tv_sec) + (t.tv_usec / 1000000.0), 86400);
}
static float secondOfDayFmod()
{
timeval t;
gettimeofday(&t, NULL);
return fmod(((t.tv_sec) + (t.tv_usec / 1000000.0)), 86400);
}
};
using namespace std;
int main(int argc, const char *argv[])
{
for (int i = 0; i < 100; i++)
{
cout << "fmodf:\t" << A::secondOfDayFmodF() << endl;
cout << "fmod:\t" << A::secondOfDayFmod() << endl;
// sleep for 1 s
sleep(1);
}
getchar();
}
出力:
fmodf: 5760
fmod: 5700.17
fmodf: 5760
fmod: 5701.17
fmodf: 5760
fmod: 5702.17
fmodf: 5760 fmod
: 5703.17 fmodf : 5760 fmod: 5704.17 fmodf : 1.5
では、バージョンが期待される結果 (呼び出し後に変更)を提供するのに、バージョンがfmodf()
毎回同じ出力を提供するのはなぜですか? ドキュメントに何か欠けていますか?fmod()
sleep()