2016-08-30

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.