Zaxter
Zaxter

Reputation: 3033

Why does difftime() return a double?

From difftime()'s man page:

double difftime(time_t time1, time_t time0);

The difftime() function returns the number of seconds elapsed between time time1 and time time0, represented as a double.

Since 'number of seconds' doesn't require floating-point numbers, why does this function return a double?

Upvotes: 12

Views: 2750

Answers (2)

chux
chux

Reputation: 153498

C allows for various scalar numbers (integers, floating point) to represent time. It needs to be a "... real types capable of representing times" C11 §7.27.1 3,

The range and precision of times representable in clock_t and time_t are implementation-defined. C11dr §7.27.1 4

The difference between 2 time_t values, as a double affords a vary wide range and precision.

OP, "Since 'number of seconds' doesn't require floating-point numbers, why does this function return a double?


[Edit] Linux/posix might not use fractions of seconds, but other systems have done so. The C standard that defines difftime() choose double and that accommodates an integer accumulation of seconds as well as other OS implementations.

Upvotes: 4

J...
J...

Reputation: 31403

This documentation is more clear on the point:

On POSIX systems, time_t is measured in seconds, and difftime is equivalent to arithmetic subtraction, but C and C++ allow fractional units for time_t.

Although POSIX requires time_t to be an integer type, for non-POSIX systems it is possible that this can return fractional seconds.

Upvotes: 5

Related Questions