Итак, мне нужен был способ получить вторую часть дня, поэтому я перепутал с 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