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

Python Discussion :

Réels codés sur 4 octets


Sujet :

Python

  1. #1
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut Réels codés sur 4 octets
    Bonjour,

    Je dois générer un index spatial pour des données géographiques dans un format vecteur plus tout jeune.

    La spécification qui précise les calculs à effectuer indique bien que ces calculs doivent être menés avec des rééls codés sur 4 octets (pour éviter des problèmes de précisions machine lors de l'utilisation de l'index sur des machines différentes).

    Quand j'avais écrit le programme en C, pas de problème : float et cast sur les résultats fournissant des double.

    Je souhaite recoder tout ça en Python mais vous devinez le problème : un seul type réel codé sur 8 octets.

    Je n'ai pas trop envie de me lancer dans l'écriture d'une classe spécifique et de gérer mantisse, exposant, etc...

    Connaîtriez-vous un package/module que je pourrais utiliser ?

    ps : les opérations à effectuer sur ces réels 4 octets se résument aux 4 opérations de base pour ramener les coordonnées (longitude/latitude) en degrés à des entiers dans [0,255]
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Regarde du côté du module "ctypes" qui fait la liaison avec le C.

    Autre solution: le module "struct".

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    Salut tu a le module ctypes
    qui permet d'utiliser des type c dans un script en python.

    Tu a des exemples ici:
    http://wikipython.flibuste.net/Ctypes
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Sinon, puisque tu parles de vecteurs, avec array ou numpy, tu peux gérer des tableaux de floats sur 4 octets, après, tout dépend de ce que tu veux faire.

  5. #5
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Merci pour toutes ces pistes.

    J'ai un peu regardé mais rien ne me parait satisfaisant.

    Struct (avec pack et unpack) que je connais ne va pas trop m'aider car ce n'est pas une écriture dans un fichier d'un float Python (8 octets) avec un format en "f" (réel 4 octets) que je veux faire. Le seul apport éventuel c'est une combinaison de pack et unpack (+ décalages à gauche ou droite) pour accéder plus facilement aux 3 parties signe/exposant/mantisse du style :

    liste_4_entiers = unpack('>4B',pack('>f',reel_8_octets))
    # 1er bit
    signe = liste_4_entiers[0] >> 7
    # 8 bits suivants
    exposant = (liste_4_entiers[0] << 1) + (liste_4_entiers[1] >> 7)
    etc ...

    Mais après j'en reviens à de l'arithmétique sur des nombres à virgule flottante (bof).

    Pour array ou numpy, un stockage en float est effectivement possible mais dès que je récupère une valeur, c'est sousla forme d'un float Python et on retombe dans la même problèmatique. Analogue avec les types de ctypes.

    Je pense que je vais me tourner vers une "mini" bibliothèque écrite en C avec une fonction qui prendra en entrée les coordonnées en float Python/double C, s'occupera de mener les calculs en réels 4 octets et retournera les coordonnées entières passées dans [0,255]
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD16] Index fichier de type libellé (codé sur 4 octet)
    Par GCASPIC10 dans le forum WinDev
    Réponses: 11
    Dernier message: 25/02/2015, 12h33
  2. Additionner des chiffres codés sur 5 octets
    Par Menontona dans le forum C
    Réponses: 22
    Dernier message: 15/09/2010, 11h36
  3. Réponses: 1
    Dernier message: 02/04/2010, 16h14
  4. [VB.NET] Conversion int-> bytes sur 4 octets
    Par SteelBox dans le forum Windows Forms
    Réponses: 11
    Dernier message: 09/01/2005, 23h08
  5. Existe-t'il un type tenant sur 2 octets ?
    Par benj63 dans le forum C++Builder
    Réponses: 13
    Dernier message: 20/06/2002, 18h03

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