Caleçon est à la fois une calculatrice et un convertisseur d'unités de
mesure. Lors de la conversion du code de Caleçon à Free Pascal, j'ai
constaté avec plaisir que sa bibliothèque de temps d'exécution contient,
comme Delphi, des unités ConvUtils et StdConvs.
Malheureusement, on retrouve quelques erreurs dans les unités. Au départ,
j'ai choisi d'écrire ma propre unité de conversion. Dernièrement, j'ai
décidé d'essayer de corriger le code Free Pascal dans l'espoir de soumettre
ces corrections pour inclusion dans une future version du compilateur.
Les erreurs lors de la conversion entre des températures mesurées en degrés Celsius et Fahrenheit constituent le problème le plus évident. De plus, il manque certaines conversions et deux ou trois autres sont incorrectes.
Il s'avère que la partie interface du fichier d'origine avait les
structures correctes pour manipuler des conversions non linéaires comme
entre les degrés Celsius et Fahrenheit, mais elles ne sont pas utilisées par
après. En conséquence, j'ai considérablement modifié la partie
implémentation du fichier ConvUtils. J'ai également ajouté
certaines procédures et fonctions tirées de versions récentes des unités
Delphi.
L'archive
rtl-conversion.zip contient les changements proposés à ConvUtils
et StdConvs ainsi que deux programmes de démonstration
et des tests unitaires. Pour éviter des problèmes avec les fichiers
d'origine, les nouveaux fichiers sont nommés mdconvutils.pp,
mdconvutil.inc et mdstdconvs.pp. Les tests
unitaires ne couvrent pas les routines de conversion dans mdstdconvs.pp
.
La conversion entre TDateTime et les dates juliennes et les
dates juliennes modifiées ne fonctionne pas. J'ai vérifié que le problème
était dans deux routines, DateTimeToJulianDate et
TryJulianDateToDateTime, trouvés dans l'unité DateUtils.
Il s'avère que la conversion est effectuée pour les jours entiers, à
l'exclusion des fractions de jour. J'ai soulevé le problème dans le bugtracker
de Free Pascal. Espérons qu'une correction sera appliquée sous peu.
En attendant, les erreurs peuvent être vues en comparant les résultats
obtenus avec dateconversion (télécharger l'archive dateconversion.zip) avec
ceux d'un site de conversion de renom tel le
Goddard Space Flight Center de la NASA. Si la case à cocher Use
corrected functions est cochée, les fonctions avec mes corrections
proposées seront utilisées à la place de celles de DateUtils.