Chcesz wiedzieć ile losowych testów odpaliłem? Ze 20 000 i nie znalazłem ani jednej rozbieżności. Więc jesteś albo ja jestem wyjątkowym szczęściarzem Generalnie masz problem z typami w swoim programie i dlatego dla granicznego przypadku twój program działa inaczej niż powinien:
[ol]
[li] przede wszystkim zapomnij o float. Na spoju stosuj tylko i wyłącznie double (poza zadaniami gdzie wyraźnie jest podane żeby użyć float).[/li]
[li] ten kod:
double a = 1.0;
int b = 1;
if(a == b)
cout << "rowne" << endl;
else
cout << "nierowne" << endl;
Może wyświetlić zarówno jednego jak i drugi komunikat. Chodzi mi o warunek w Twoim for'ze. Jeżeli masz tam, że i[li] główny błąd jest tutaj:
T1 = (GG * 3600 + MM * 60 + SS) / (D / 1000);
Jeżeli najpierw podzielisz np. 3 przez 1000, a potem przez ten ułamek, który Ci wyjdzie dzielisz jakąś wartość to może się zdarzyć, że otrzymasz nieco inny wynik niż się spodziewałeś. Poza tym pamiętaj dzielenie jest czasochłonne, jeżeli w wyrażeniu są dwa, lepiej jest pomnożyć przez mianownik mianownika niż podzielić.[/li][/ol]
PS. Gratuluje wytrwałości, jakbym był Twoim nauczycielem od informatki to dostałbyś 4 (a nie np. 2), ponieważ trudno o przypadek dla którego Twój kod nie działa