2

そのため、その日の秒を取得できる方法が必要だったので、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()

4

1 に答える 1