Pregunta

¿Por qué es la diferencia entre los dos time_ts devuelto por el difftime( time_t t1, time_t t2) método como una double?No veo donde está el requisito de precisión viene.

¿Fue útil?

Solución

Porque time_t es simplemente definida en el estándar como un arithmetic type capable of representing times.

Eso es todo lo que dice acerca de ella.No tiene que ser un número entero, no tiene que representar segundos.Que sólo podía ser un múltiplo de diez, o puede ser un tipo de punto flotante, capaz de representar a veces con una resolución máxima de 10-43 segundos.

La cita de C99 7.23.1 Components of time es (ligeramente parafraseado):

Los tipos declarados son clock_t y time_t, que son la aritmética de los tipos capaces de representar los tiempos.El rango y la precisión de los tiempos de representable en clock_t y time_t son de aplicación definido.

Por lo tanto la gente que ciegamente trabajo la diferencia de tiempo con:

delta = time_end - time_begin;

puede encontrar que su código no funciona en todas las plataformas.

Ahora no sé la parte superior de mi cabeza cualquier plataformas donde no es un simple segundos desde la época pero he sido mordido por supuestos como antes, tales como asumir A a través de Z son contiguos, mientras que, de hecho, que no es necesario y que no funciona tan bien en el mainframe de productos que utilizan EBCDIC.Y, sí, están todavía en pesado a pesar de aparentemente haber estado muriendo desde la década del '60 :-)

La C99 justificación documento tiene esto que decir:

Los tipos clock_t y time_t son la aritmética, ya que los valores de estos tipos debe, de acuerdo con la práctica existente, ser, en ocasiones, en comparación con -1 (un "no-saber" indicación), debidamente emitidos.

No hay aritmética de las propiedades de estos tipos son definidos por la Norma, sin embargo, con el fin de permitir implementaciones de la máxima flexibilidad en la elección de los rangos, precisiones, y las representaciones más adecuadas para su aplicación.La representación no necesita ser un recuento de algunos conceptos básicos de la unidad;una aplicación podría representar los diferentes componentes de un valor temporal como los subcampos de tipo entero.

Otros consejos

A pesar de ser universalmente pensamiento — y la práctica — como parte integrante del tipo de representación de segundos desde el inicio de algunos época, time_t en realidad, no es formalmente definido como tal, por lo que no podía portable utilizar el resultado de difftime si era un time_t.Como otras alternativas: int es demasiado pequeño en algunas circunstancias (como es long) y long long no es portátil.

Probablemente porque es el más general de la aritmética tipo.Y permite mejor que la segunda precisión si el subyacente time_t lo admite.

La razón de esto es que no hay operaciones aritméticas definidas para el tipo de time_t, volviendo un doble implica que puede utilizar el resultado de los cálculos.

IOW si se agregan dos time_t los valores con cada uno de los otros que son la inseguridad del territorio desde diferentes comportamiento podría resultar si time_t se define como un unsigned int o un normal int - dependiendo de su plataforma.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top