Skip to content
Snippets Groups Projects
Commit f50ad340 authored by Luis Kornblueh's avatar Luis Kornblueh
Browse files

Solved int64_t division problem.

parent bfde2372
No related branches found
No related tags found
No related merge requests found
......@@ -1074,20 +1074,19 @@ divideTimeDeltaInSeconds(struct _timedelta* dividend, struct _timedelta* divisor
{
if ((dividend->year == 0) && (dividend->month == 0) && (divisor->year == 0) && (divisor->month == 0))
{
int64_t dividend_in_ms = (dividend->day * NO_OF_SEC_IN_A_DAY + dividend->hour * NO_OF_SEC_IN_A_HOUR +
dividend->minute * NO_OF_SEC_IN_A_MINUTE + dividend->second) * NO_OF_MS_IN_A_SECOND + dividend->ms;
int64_t divisor_in_ms = (divisor->day * NO_OF_SEC_IN_A_DAY + divisor->hour * NO_OF_SEC_IN_A_HOUR +
divisor->minute * NO_OF_SEC_IN_A_MINUTE + divisor->second ) * NO_OF_MS_IN_A_SECOND + divisor->ms;
intmax_t numerator = (intmax_t) ((dividend->day * 86400 + dividend->minute * 60 + dividend->second) * 1000 + dividend->ms);
intmax_t denominator = (intmax_t) ((divisor->day * 86400 + divisor->minute * 60 + divisor->second ) * 1000 + divisor->ms);
if(divisor_in_ms == 0) /* Division by zero is illegal. */
return NULL;
if (denominator == 0) /* Division by zero is illegal. */
return NULL;
quo_ret->quotient = (int64_t)(dividend_in_ms/divisor_in_ms);
quo_ret->remainder_in_ms = dividend_in_ms - quo_ret->quotient*divisor_in_ms; //remainder is reported in ms.
imaxdiv_t div = imaxdiv(numerator, denominator);
quo_ret->quotient = (int64_t) div.quot;
quo_ret->remainder_in_ms = (int64_t) div.rem;
return quo_ret;
}
return quo_ret;
}
else /* Only seconds supported */
return NULL;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment