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

Assembleur Discussion :

Conversion de date et division 64 bits


Sujet :

Assembleur

  1. #21
    Membre habitué
    Avatar de TangiX
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 139
    Points : 168
    Points
    168
    Par défaut
    je sais pas exactement comment ca marche pour le ntfs, mais quand on parle de l'année et qu'on prend une valeur tronquée du resultat, là ya grosse différence entre 1.99.. et 2 !!

  2. #22
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 47
    Points : 52
    Points
    52
    Par défaut Re: Conversion date et division 64 bits
    Citation Envoyé par dway
    [...]et dans ce systeme de fichiers les dates sont codés en unités de 100 ns écoulés depuis le 01/01/1601 !![
    Il nous le dit comment ça marche exactement, et maintenant, avec un petit calcul, tu verras que rien que 4611686018427387904 ça représente déja une année dans le genre 16000 et des poussières... autant dire avec certitude, une année qui ne sera jamais utilisée.

  3. #23
    Membre habitué
    Avatar de TangiX
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 139
    Points : 168
    Points
    168
    Par défaut
    tu pense au musée un peu ??
    de toute facon je pense que dway s'en fout totalement puisque tu lui a deja donnée la soluce avec la div 64/32 bits !

    pour le calandar dway, ca marche ou pas ?? dway tu dors ?

    ps meme avec des années plus basses on peu avoir en resultat 1.99 ou 2, en fin bon j'di plu rien !

    bon dev'

  4. #24
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 80
    Points : 69
    Points
    69
    Par défaut
    Citation Envoyé par TangiX
    ...
    pour le calandar dway, ca marche ou pas ?? dway tu dors ?
    nan , et toi t'as trouvé qq chose ?

  5. #25
    Membre habitué
    Avatar de TangiX
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 139
    Points : 168
    Points
    168
    Par défaut
    ben... ta vu mon post sur la similitude avec les conversions de base ?? t'as essayé ??

  6. #26
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 47
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par TangiX
    ps meme avec des années plus basses on peu avoir en resultat 1.99 ou 2, en fin bon j'di plu rien !
    bon dev'
    1.999999999999999999783159 au lieu de 2, ça fait une erreur de 0,000000000000000000216841 unités, soit dans notre cas, une erreur de 21,6 empto-secondes (10e-27) ou encore 0,0216841 yocto-secondes (10e-24), car apparemment empto n'est pas officiel. Enfin bref, rien de très significatif, même pour les jeux olympiques, mais moi non plus je dis plus rien

  7. #27
    Membre habitué
    Avatar de TangiX
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 139
    Points : 168
    Points
    168
    Par défaut
    et si l'algo ne prend que la partie entiere ?? ... bon d'accord jdi plus rien promis

  8. #28
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 47
    Points : 52
    Points
    52
    Par défaut
    ben ça ferait des erreurs de 1, soit 100 nano-secondes, soit 0,1 micro-secondes. Même ça, moi je dis que c'est pas très important pour la date et l'heure de création d'un fichier

  9. #29
    Membre habitué
    Avatar de TangiX
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 139
    Points : 168
    Points
    168
    Par défaut
    attention la division permet de connaitre le nb d'année !
    donc le resultat correspont a un nombre d'année et 1 année ca fait gros comme erreur

  10. #30
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 80
    Points : 69
    Points
    69
    Par défaut
    Citation Envoyé par TangiX
    ben... ta vu mon post sur la similitude avec les conversions de base ?? t'as essayé ??
    késako ???

  11. #31
    Membre habitué
    Avatar de TangiX
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 139
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par TangiX
    ...
    sinon pour le calandar, je comprend mieux le coup du 1/1/1601, c du au années bissextiles !
    les années bissextiles sont tous les multiples de 4... sauf si c un multiple de 100.... sauf si c un multiple de 400, or le dernier multiple de 400 precedent l'aire informatique dans le calandrier gregorien... c 1600!!
    donc une periode 400 ans a toujours le meme nbre de jours ds laquelle les trois premieres periodes de 100 ans ont le meme nbre de jour etc
    donc pour trouver l'année c super simple, l'algo est exactement le meme qu'une conversion de base !
    pour les mois ca doit etre plus dur, mais on peut faire un tableau ou autre chose avoir...

    bon dev'
    cete sur la premiere page

  12. #32
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 47
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par TangiX
    attention la division permet de connaitre le nb d'année !
    donc le resultat correspont a un nombre d'année et 1 année ca fait gros comme erreur
    T'as vu ça où ? Moi j'avais compris que la division permettait de transformer le nombre de 100ns en nombre de secondes, soit diviser par 10 000 000.

  13. #33
    Membre habitué
    Avatar de TangiX
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 139
    Points : 168
    Points
    168
    Par défaut
    Oups ...

  14. #34
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 80
    Points : 69
    Points
    69
    Par défaut
    ca :

    Citation Envoyé par TangiX
    ...
    sinon pour le calandar, je comprend mieux le coup du 1/1/1601, c du au années bissextiles !
    les années bissextiles sont tous les multiples de 4... sauf si c un multiple de 100.... sauf si c un multiple de 400, or le dernier multiple de 400 precedent l'aire informatique dans le calandrier gregorien... c 1600!!
    donc une periode 400 ans a toujours le meme nbre de jours ds laquelle les trois premieres periodes de 100 ans ont le meme nbre de jour etc
    donc pour trouver l'année c super simple, l'algo est exactement le meme qu'une conversion de base !
    pour les mois ca doit etre plus dur, mais on peut faire un tableau ou autre chose avoir...

    bon dev'
    c'est la reponse a ca ? :

    Citation Envoyé par dway
    Citation Envoyé par TangiX
    ben... ta vu mon post sur la similitude avec les conversions de base ?? t'as essayé ??
    késako ???

    si oui, j'ai rien compris !

  15. #35
    Membre habitué
    Avatar de TangiX
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 139
    Points : 168
    Points
    168
    Par défaut
    bon d'acord g jammais ete fais pour etre prof moi

    bon je vais reassaye en plus clair... et plus long

    donc ce cher pape Gregoire XIII en 1582, ben il en avais super marre que les jours soit completement decalé dans l'année, donc il a sauté plein de jour et a crée le calandrier Gregorien

    Dans son calendrier, les année bissextiles sont tous les quatres ans
    (multiple de 4)
    mais la ca fait encore un decalage donc tous les multiples de 100, ne sont pas bissextiles ! mais la encores ca ne suffit pas donc tous les multiples de 400 sont bissextiles !

    1600 2000 et 2400 sont des multiples de 400 donc ils sont bissextiles
    1700 1800 1900 2100 2200 2300 sont des mutiples de 100 et donc ne sont pas bissextiles
    Les autres multiples de 4 sont bissextiles !
    ainsi il existe un cycle de 400ans

    On peut ainsi voir qu'une période de 400 ans a un nombre fixe de jours donc de ns, on peut considerer 400 ans comme etant le rang le plus haut d'une conversion
    si l'on demarre le 1/1/1601, ca n'est pas par hazard, 1600 etait une année spéciale, le fait de la placé à la finde la période de 400ans (2000 pour la premiere periode) permet de decouper la periode de 400ans

    Les trois première période de 100ans ont le meme nb du jour...
    la quatriemme est un peu plus longue (1 jour) mais ne peut etre compté car sinon ont aurait une periode de 400ans entiere (deja eliminé au rang precedent !)

    les siecles sont donc notre deuxieme rang

    viennet ensuite les periode 4 ans (24+1) rang 3
    puis les périodes de 1 an (3 +1) rang 4
    en additionnant ces 4 rang à 1601, tu a ton année, le reste te permet de trouver moi,jour,heures,min,sec...
    (pour les moi je pensai a un tableau (a voir qd tu auras fais les années))

    j'espère avoire ete plus clair
    sinon a bientot

    bon dev'

  16. #36
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Il doit y avoir un moyen d'utiliser deux divisions successives 64/32 = 32 de manière à avoir un reste suffisement petit cad < 32bits. Le reste doit être inférieur à 2^32 donc la minute parait approprié, puisque si l'unité est 100ns on a la minute égale à 60*1000*1000*10 est a peu près 8 fois inférieur à 2^32. Ce qui laisserait au quotient qui doit aussi être inférieur à 2^32, 2^32 minutes soit 8000 années, donc la formule marcherait jusqu'a 9600 ap JC donc, c'est covnenable. Par cette formule tu as déjà séparé les minutes du reste, donc ca peut être interessant, ensuite tu peux faire les divisions sur les deux nombres obtenus.

    On a grand interet à utiliser les divisions euclidiennes pour déterminer la date. Imagine qu'on parte de l'an 0. Tu es à l'an 983. Tu veux savoir combien de jour il y a eu depuis cette année. Tu as donc théoriquement, 365 jours par an donc d'une première approximation il y a eu 983 * 365 jours. Mais il faut aussi rajouter les années bissextiles, donc on rajoute le quotient entier de 983/ 4. Et puis on va enlever aussi le quotient entier de 983 / 100 et rajouter le quotient entier de 983/400

    NbJours = 983 * 365 + 983/4 - 983/100 + 983/400

    généralisé en :

    NbJours = x * 365 + x/4 - x/100 + x/400

    Dans notre cas, NbJours nous le connaissons, puisque c'est le nombre de minutes précédement déterminé divisé par 60*24, et nous voulons trouver x. Cela dit, ce sont des divisions euclidienes, et je n'ai pas réussi à résoudre l'équation, et je n'ai plus le temps là. Cela dit, ce qui n'aurait pas de raisons de marcher, semble marcher cad, faire la division euclidienne suivante :

    x = (NbJours * 400) / (365*400 + 100 - 4 + 1)

    On pourrait essayer de démontrer à partir de cette formule que c'est vrai, m'enfin là j'ai pas le temps. Par ailleur si vos années commence à 1601 il y a un problème, puisque ma formule part de l'an 0, qui a les même propriétés que l'an 1600 et pas 1601, donc il faudrait ajouter 365 (c'est ca le nombre de jour d'une année au fait ??) et ajouter 1600 à la fin pour avoir la vraie année. Cela dit, je crois qu'il y une erreur, qui ne se verra qu'a partir de l'an 2000, il faut que je revoie ca, là je n'ai pas le temps.

    Cela dit, la méthode précédente semble être plus simple, celle là n'a que l'avantage de ne demander qu'une multiplication et une division.

  17. #37
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 80
    Points : 69
    Points
    69
    Par défaut
    ok merci les gars pour vos explications, mais si vous pouviez faire la démo avec un exemple, je pigerais peut etre mieux ...
    1C3BE624D981EFBh ca doit donner qq chose comme 09/12/03...

  18. #38
    Membre habitué
    Avatar de TangiX
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 139
    Points : 168
    Points
    168
    Par défaut
    comment j'me prend la gueule ...
    bon g fait cette conversion en esperant que tu comprenne mais je n'ai pa la meme date que toi (j'espere que ta fait expré!!):

    • 1C3BE624D981EFBh ca doit donner qq chose comme 09/12/03...

      1s = 1 000 000 000 ns = 10 000 000 : 00 00 00 00 00 98 96 80
      1min = 60 s = 600 000 000 : 00 00 00 00 23 C3 46 00
      1h = 60 min = 36 000 000 000 : 00 00 00 08 61 C4 68 00
      1j = 24h = 864 000 000 000 : 00 00 00 C9 2A 69 C0 00
      28j = 24 192 000 000 000 : 00 00 16 00 A3 91 00 00 F
      29j = 25 056 000 000 000 : 00 00 16 C9 CD FA C0 00 F
      30j = 25 920 000 000 000 : 00 00 17 92 F8 64 80 00 A,J,S,N
      31j = 26 784 000 000 000 : 00 00 18 5C 22 CE 40 00 J,M,M,J,A,O,D
      1a = 365j = 315 360 000 000 000 : 00 01 1E D1 78 C6 C0 00
      1ab = 366j = 316 224 000 000 000 : 00 01 1F 9A A3 30 80 00
      4a/b = 3a + 1ab = 1 262 304 000 000 000 : 00 04 7C 0F 0D 84 C0 00
      100a = 24*4a/b + 4a = 31 556 736 000 000 000 : 00 70 1C AF 27 8D 00 00
      400a = 3*100a + 25*4a/b = 126 227 808 000 000 000 : 01 C0 73 85 C8 9D C0 00


      année (division euclydienne):
      01 C3 BE 62 4D 98 1E FB / 01 C0 73 85 C8 9D C0 00 = 1;r=00 03 4A DC 84 FA 5E FB
      00 03 4A DC 84 FA 5E FB / 00 70 1C AF 27 8D 00 00 = 0;r=00 03 4A DC 84 FA 5E FB
      00 03 4A DC 84 FA 5E FB / 00 04 7C 0F 0D 84 C0 00 = 0;r=00 03 4A DC 84 FA 5E FB
      00 03 4A DC 84 FA 5E FB / 00 01 1E D1 78 C6 C0 00 = 2;r=00 01 0D 39 93 6C DE FB
      année = 1601+1*400+0*100+0*4+2*1=2003
      année non bissextile donc fevrier=28j

      mois (technique pas génial!)
      J: cmp 00 01 0D 39 93 6C DE FB, 00 00 18 5C 22 CE 40 00 : >0 r= 00 00 F4 DD 70 9E 9E FB
      F: cmp 00 00 F4 DD 70 9E 9E FB, 00 00 16 00 A3 91 00 00 : >0 r= 00 00 DE DC CD 0D 9E FB
      M: cmp 00 00 DE DC CD 0D 9E FB, 00 00 18 5C 22 CE 40 00 : >0 r= 00 00 C6 80 AA 3F 5E FB
      A: cmp 00 00 C6 80 AA 3F 5E FB, 00 00 17 92 F8 64 80 00 : >0 r= 00 00 AE ED B1 DA DE FB
      M: cmp 00 00 AE ED B1 DA DE FB, 00 00 18 5C 22 CE 40 00 : >0 r= 00 00 96 91 8F 0C 9E FB
      J: cmp 00 00 96 91 8F 0C 9E FB, 00 00 17 92 F8 64 80 00 : >0 r= 00 00 7E FE 96 A8 1E FB
      J: cmp 00 00 7E FE 96 A8 1E FB, 00 00 18 5C 22 CE 40 00 : >0 r= 00 00 66 A2 73 D9 DE FB
      A: cmp 00 00 66 A2 73 D9 DE FB, 00 00 18 5C 22 CE 40 00 : >0 r= 00 00 4E 46 51 0B 9E FB
      S: cmp 00 00 4E 46 51 0B 9E FB, 00 00 17 92 F8 64 80 00 : >0 r= 00 00 36 B3 58 A7 1E FB
      O: cmp 00 00 36 B3 58 A7 1E FB, 00 00 18 5C 22 CE 40 00 : >0 r= 00 00 1E 57 35 D8 DE FB
      N: cmp 00 00 1E 57 35 D8 DE FB, 00 00 17 92 F8 64 80 00 : >0 r= 00 00 06 C4 3D 74 5E FB
      D: cmp 00 00 06 C4 3D 74 5E FB, 00 00 18 5C 22 CE 40 00 : <0 m=12 reste identique

      Jour (Division euclydienne)
      00 00 06 C4 3D 74 5E FB / 00 00 00 C9 2A 69 C0 00 = 8;r= 00 00 00 7B 1A 26 5E FB
      J=8
      Date: 8 decembre 2003

      Heure (Division Euclydienne)
      00 00 00 7B 1A 26 5E FB / 00 00 00 08 61 C4 68 00 =14;r= 00 00 00 05 C1 68 AE FB
      h=14

      Minutes (division...)
      00 00 00 05 C1 68 AE FB / 00 00 00 00 23 C3 46 00 =41;r= 00 00 00 00 07 22 78 FB
      m=41

      Secondes(division simple)
      00 00 00 00 07 22 78 FB / 00 00 00 00 00 98 96 80 = 11,9699707

      Conclusion: 1C3BE624D981EFBh correspond à 8/12/2003-14h41m11,9699707secondes


    bon dev'

  19. #39
    Membre habitué
    Avatar de TangiX
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 139
    Points : 168
    Points
    168
    Par défaut
    Oops j'ai fait une faute dans mon post
    La date est bien le 9 décembre et non le 8!
    la dvision pour trouver le jour peut donner 0 or le 0 decembre n'existe pa ! il faut donc incrementer le jour et la date est bonne

Discussions similaires

  1. Probleme de conversion de dates
    Par manu00 dans le forum Langage
    Réponses: 4
    Dernier message: 29/05/2005, 00h00
  2. Conversion de date
    Par jdu dans le forum Access
    Réponses: 2
    Dernier message: 26/01/2005, 16h17
  3. Conversion de dates
    Par Gogoye dans le forum Modules
    Réponses: 5
    Dernier message: 10/08/2004, 11h39
  4. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31
  5. Conversion de date lors d'un import
    Par bilbon.S dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 26/03/2004, 14h33

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