Probleme d'evolution de syntaxe pour les puissances de 10

madjic_ouf Messages postés 7 Date d'inscription jeudi 7 avril 2005 Statut Membre Dernière intervention 6 janvier 2023 - 6 janv. 2023 à 10:56
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 - 7 janv. 2023 à 18:49

Bonjour à tous,

je suis en train de mettre à jour un vieux projet Delphi (2003).

J'ai récupéré le code source que j'ai balancé dans RAD Studio 11 Embarcadero comme un bourrin

Et là, j'ai des erreurs de syntaxe et ca semble être les puissances de 10:

maValeur := 1.E6; // [ERREUR:] E2003 Identificateur non declaré: 'E6'

Après des bidouilles, j'ai rajouté un zero et ca compile. (1.E6 -> 1.0E6)

C'est bien la puissance de 10, la valeur vaut bien un million.

maValeur := 1.0E6; // Un million

Mon souci est que même si je suis convaincu que c'est bon, je préfèrerais etre absolument certain et j'ai beau chercher je ne trouve rien qui explique ce changement.

Savez vous si il y a une annonce officielle expliquant cette évolution de syntaxe ? De quand ça date ? 

Il y a quand même un souci de rétrocompatibilité.

Quelqu'un aurait une idée ?

Merci à tous et bonne journée,

Yannick


1 réponse

Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
Modifié le 7 janv. 2023 à 18:51

Bonjour

je ne connais pas Delphi, mais comme personne ne t'as répondu...

Tout d'abord, cette notation n'est pas faite spécifiquement pour avoir une puissance de 10.

C'est la notation dite scientifique qui te permet d'exprimer n'importe quel nombre avec la virgule flottante, en base 10.

Voir l'article wikipédia https://fr.wikipedia.org/wiki/Virgule_flottante

Donc, pour la base 10, la mantisse est un nombre strictement compris dans l'intervalle ]-1; 1[

-1.2345679E12 est tout aussi possible que 9.99999E-99

Bon ça, c'était pour les maths.


Maintenant parlons code.

Le compilateur doit d'abord lire et comprendre le texte que tu as écrit.

Il s'attend donc à trouver ce qui ressemble à un nombre à virgule, puis un E et un entier signé.

A un moment de sa vie, le texte "1." voulait forcément dire 1.0 (et pas 1, car 1, c'est un entier, pas un flottant).

Et puis lors d'une évolution quelconque soit

  • quelqu'un s'est dit que ça pouvait porter confusion, (voire, c'est peut-être même arrivé) et dans ce cas, le programme aurait un comportement imprévu.
  • le code de l'interpréteur de texte a été plus ou moins revu (par exemple avant ça splitait aux espaces et y'avait des boucles pour tout décoder et maintenant c'est des regex) et le gars qui l'a refait ne s'est même pas posé la question

Bref 1.0, dans tous les langages que je connais, ça vaut 1 dans un type à virgule.7

Donc 1.0E6, c'est forcément un million.

Comme 2.0E-3 c'est 0.002.

0
Rejoignez-nous