Pergunta

Qual é a diferença entre dois time_ts retornado pelo difftime( time_t t1, time_t t2) método um double?Não vejo onde a precisão exigência vem.

Foi útil?

Solução

Porque time_t é simplesmente definido na norma como um arithmetic type capable of representing times.

Isso é tudo que ele diz sobre isso.Ele não tem que ser um número inteiro, ele não tem que representam segundos.Ele só podia ser um múltiplo de dez, ou pode ser um ponto flutuante tipo capaz de representar vezes para baixo para uma resolução de 10-43 segundos.

A citação de C99 7.23.1 Components of time é (ligeiramente parafraseado):

Tipos declarados são clock_t e time_t, que são tipos de aritmética capaz de representar vezes.O alcance e a precisão das vezes representáveis em clock_t e time_t está definido para implementação.

Por isso as pessoas que cegamente trabalho fora a diferença de tempo com:

delta = time_end - time_begin;

podem achar que o seu código não funcionar em todas as plataformas.

Agora eu não sei em cima da minha cabeça de qualquer de plataformas que não é um simples segundos desde a época mas eu fui mordido por pressupostos como isso antes, como assumindo A através de Z são contíguos, enquanto que, na realidade, isso não é necessário e o que não funciona tão bem no mainframe produtos que uso EBCDIC.E, sim, eles são ainda no pesada use apesar de, aparentemente, ter sido a morrer desde a década de 60 :-)

O C99 lógica documento tem isto a dizer:

Os tipos clock_t e time_t são aritmética porque os valores desses tipos deve, em conformidade com a prática existente, na ocasião, ser comparado com 1 (um "não-saber" indicação), devidamente elenco.

Não aritmética propriedades destes tipos são definidos pela Norma, no entanto, a fim de permitir implementações, o máximo de flexibilidade na escolha de faixas, precisões, e representações mais adequadas para a sua aplicação a que se destina.A representação não precisa ser um contador de alguns unidade básica;uma implementação poderia representar diferentes componentes de um valor temporal, como subcampos de um tipo de número inteiro.

Outras dicas

Apesar de ser universalmente reconhecido e implementado como um tipo integral que representa os segundos desde o início de alguma época, time_t na verdade, não é formalmente definido como tal, para que você não podia portably fazer uso do resultado de difftime se fosse um time_t.Como para outras alternativas: int é muito pequena em algumas circunstâncias (como é long) e long long não é portátil.

Provavelmente porque é o mais geral aritmética tipo.E permite um melhor que o segundo precisão se o subjacente time_t suporta-lo.

A razão para isto é que não existem operações aritméticas definidas para o tipo time_t, devolvendo um double isso significa que você pode utilizar o resultado de cálculos.

IOW se você adicionar dois time_t valores uns com os outros são perigosos ao território desde um comportamento diferente pode resultar se time_t é definida como um unsigned int ou um normal int - dependendo de sua plataforma.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top