J'essaie d'écrire quelque chose dans Common Lisp pour lire et écrire des données dans un format binaire particulier, à la fois comme moyen d'apprendre Lisp et, espérons-le, d'obtenir un outil utile (ou du moins intéressant). J'ai commencé avec le projet d'analyseur dans Practical Common Lisp et se sont construits à partir de là. Une chose dont j'ai besoin qui n'est pas là est des nombres à virgule flottante de longueur arbitraire (en octets). CL fournit ldb pour les entiers non signés, et à partir de là, ceux signés n'étaient pas trop difficiles à construire - existe-t-il des fonctionnalités utiles comparables pour obtenir et définir les composants de signe, d'exposant et de fraction d'un nombre à virgule flottante ? Je ne veux pas avoir à utiliser de bibliothèques pour cela, car une partie du but est de m'entraîner à écrire du code, mais je ne veux pas non plus passer du temps à ré-implémenter ce qui est déjà intégré.

1
Vivian 18 nov. 2020 à 03:23

1 réponse

Meilleure réponse

Si vous lisez des flottants au format binaire, vous devrez implémenter votre propre analyseur. Plus que probablement, il s'agira d'une valeur codée en virgule flottante IEEE. Vous pouvez trouver toutes les informations dont vous avez besoin sur Wikipédia : https://en.wikipedia.org/wiki/IEEE_754

Pour accéder aux différents composants d'une valeur à virgule flottante une fois qu'elle est dans CL, vous pouvez utiliser les différentes fonctions ici : http://clhs.lisp.se/Body/f_dec_fl.htm

  • décoder-flotteur
  • float-radix
  • flotteur-signe
  • chiffres-flottants
  • float-précision
  • entier-decode-float
1
Wilfredo Velázquez-Rodríguez 19 nov. 2020 à 14:01