2 votes

Champ évalué aux valeurs (0.0), non de type SHORT-FLOAT

J'ai récemment découvert qu'il est possible d'ajouter des restrictions de type aux structs, mais pour une raison quelconque, cela n'autorise pas les 0.0 comme une valeur par défaut légale pour les flottants courts, mais elle autorise 100.0 .

J'obtiens l'erreur suivante lorsque j'essaie d'exécuter make-ship pour créer une instance d'un ship en CLisp :

[4]> (make-ship)

*** - THE: #:ENERGY evaluated to the values (0.0), not of type SHORT-FLOAT
The following restarts are available:
ABORT          :R1      Abort main loop

Quelqu'un peut-il m'expliquer ce qui se passe exactement, et pourquoi je ne suis pas autorisé à utiliser la version 0.0 ?

Voici le code qui se comporte mal :

(defstruct ship
  location ;; fields like these have an undecided type at the moment
  (energy 0.0 :type short-float)
  cargo
  crew
  shields
  (hull-integrity 100.0 :type short-float))

4voto

Joshua Taylor Points 29737

Common Lisp possède une syntaxe pour différents types de flottants, décrite dans la section 2.3.2.2 Syntaxe d'un flottant . l'un des exemples montre comment écrire 0 comme un flottant court : 0s0 y 0.0s0 les deux fonctionnent.

3voto

Greg Buchholz Points 326

Lorsqu'il n'y a pas marqueur d'exposant ou "e" est utilisé au niveau du marqueur d'exposant, alors le type du nombre à virgule flottante lu est déterminé par la variable globale *LIRE LE FORMAT PAR DÉFAUT DES DONNÉES FLOTTANTES*. qui a pour valeur par défaut SINGLE-FLOAT qui n'est pas nécessairement un SHORT-FLOAT.

2voto

mobiuseng Points 1353

Il semble que CLisp fasse une distinction entre SINGLE-FLOAT ( 0.0 ou 0.0e0 ) et SHORT-FLOAT ( 0s0 ). Ainsi, l'appel (make-ship) échoue. Pour réparer : il faut soit remplacer 0.0 y 100.0 avec 0s0 y 100s0 respectivement ou remplacer tous les SHORT-FLOAT avec SINGLE-FLOAT 's.

PS : dans SBCL et ECL, l'exemple fonctionne tel quel car ils ne font pas de distinction entre ces flottants.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X