2015-12-24 16 views
6

Da difftime()'s man page:Perché difftime() restituisce un doppio?

double difftime(time_t time1, time_t time0);

La funzione difftime() restituisce il numero di secondi trascorsi tra tempo time1 e il tempo time0, rappresentato come un double.

Poiché "numero di secondi" non richiede numeri in virgola mobile, perché questa funzione restituisce un double?

+0

Correlato: http://stackoverflow.com/q/13855890/827263 –

risposta

4

Questo documentation è più chiara sul punto:

Nei sistemi POSIX, time_t è misurato in secondi, e difftime è equivalente a sottrazione aritmetica, ma C e C++ consentono unità frazionali per time_t.

Sebbene POSIX requires time_t to be an integer type, per i sistemi non POSIX è possibile che questo possa restituire secondi frazionari.

+1

Lo standard dice che time_t può essere: 'Aritmetico (fino a C11) Tipo reale (dal C11) in grado di rappresentare i tempi'. – Zaxter

+0

@ user3490458: Sì, ma POSIX richiede specificamente che time_t' sia un tipo intero. http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html –

+0

@KeithThompson Sì, era proprio questo il punto. –

5

C consente vari numeri scalari (interi, virgola mobile) per rappresentare il tempo. Deve essere un "... tipi reali capaci di rappresentare tempi" C11 §7.27.1 3,

La gamma e di precisione di tempi rappresentabili in clock_t and time_t sono attuazione definiti. C11dr §7.27.1 4

La differenza tra 2 time_t valori, come double permette una differenziazione ampio spettro e precisione.

OP, "Dal momento che 'il numero di secondi' non richiede numeri in virgola mobile, perché questa funzione restituisce un doppio?


[Edit] Linux/POSIX potrebbe non utilizzare frazioni di secondi, ma altri sistemi lo hanno fatto. Lo standard C che definisce difftime() sceglie double e che consente l'accumulo di interi di secondi e altre implementazioni del sistema operativo

Problemi correlati