IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Algo de calcul de la différence entre deux dates (sec, usec)


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 42
    Points : 25
    Points
    25
    Par défaut Algo de calcul de la différence entre deux dates (sec, usec)
    Bonjour,

    Connaîtriez-vous un algorithme qui permet de calculer la différence en microsecondes entre deux dates ayant un format [champs secondes sur 32bits, champs microsecondes sur 32bits] sans passer par une conversion en microsecondes des deux champs qui oblige à faire le calcul sur 64 bits ?

    Merci,

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Bonjour,

    Citation Envoyé par Akutabi Voir le message
    Connaîtriez-vous un algorithme qui permet de calculer la différence en microsecondes entre deux dates ayant un format [champs secondes sur 32bits, champs microsecondes sur 32bits] sans passer par une conversion en microsecondes des deux champs qui oblige à faire le calcul sur 64 bits ?
    Je suppose que tes champs sont ceux de struct timeval. Tout le monde est confronté au même cas.

    Convertir en 64 bits reste quand même ce qu'il y a de plus facile, même si ta machine est sur 32 bits, car tu disposes quand même de « long long » en C99 (mais pas en C++, sauf depuis C++11).

    Sinon, l'algorithme est assez clair : c'est celui de l'arithmétique, qui consiste à « emprunter » des microsecondes au champ seconde lorsque tu tombes en dessous de zéro. Donc, tu commences par soustraire tes deux champs microsecondes et si le résultat est inférieur à 0 —*attention au type qui doit être signé et qui ne l'est pas forcément, du coup — alors tu décrémentes tes secondes et tu ajoutes 1.000.000 à tes microsecondes. La conclusion est claire : c'est faisable, mais c'est plus pénible que convertir en 64 bits.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Il s'agit d'une structure "maison" mais c'est équivalent en effet.

    Par contre, est-ce que réaliser le calcul sur 32 bits n'est pas plus performant que sur 64 bits si le processeur est 32 bits même si le codage est un peu plus lourd ?

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Non. Ni d'un point de vue théorique, ni d'un point de vue pratique.

    En pratique, ton compilo va déjà faire beaucoup d'optimisations par lui-même dans les deux cas et même sans cela, la différence serait vraiment trop infime pour pouvoir être perceptible.

    Sur le plan théorique, il va falloir que tu fasses beaucoup d'opérations distinctes, comme charger « 1.000.000 » et le soustraire à ton champ, etc. qui vont en elles-mêmes te faire perdre dix fois plus de temps que ce que tu pourrais gagner à côté. Sans compter que ça risque de pourrir ta ligne de cache.

    Comme je le dis, ce n'est intéressant qu'à partir où tu fais du code générique et que tu veux maintenir le résultat de toutes tes opérations sur le même format, ou que tu travailles avec un langage et une norme stricte qui ne proposent pas nativement de type plus grand (cas du C++03 ou du C89). Sinon, ce n'est vraiment pas la peine de s'en priver.

    Par contre, il faudra quand même que tu fasses attention à tes résultats quand ceux-ci sont négatifs, notamment au niveau des modulos que tu vas appliquer pour redécomposer ton résultat en deux champs distincts.

Discussions similaires

  1. [AC-2003] Calcul de différence entre deux dates : problème de format
    Par sinifroth dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 22/01/2010, 15h35
  2. Calcul différence entre deux dates
    Par ouinih dans le forum PL/SQL
    Réponses: 1
    Dernier message: 31/12/2008, 18h53
  3. Calcul de différence entre deux dates cas vaut 0
    Par zanoubya dans le forum Débuter
    Réponses: 3
    Dernier message: 25/12/2008, 19h45
  4. Calculer la différence entre deux dates
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/12/2007, 08h27
  5. [Dates] Calcul d'une différence entre deux heures
    Par loreleï85 dans le forum Langage
    Réponses: 12
    Dernier message: 28/06/2006, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo