だから、私は今日の2番目を得ることができる方法が必要だったので、私はfmod()
& gettimeofday()
(Mac OSX)で回り込んだ。C++:fmodf()&fmod() - 奇妙な結果?
#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:5699.17
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:5760
FMOD:5705.18
...
それでは、なぜfmodf()
バージョンは私を与えるん同じ出力が毎回届きます。fmod()
バージョンでは、期待通りの結果が得られます(sleep()
コール後に変更)。私はドキュメンテーションで何かを見逃していますか?
[最新の公開されているC++標準のドラフト](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf)を参照してください) – pmg