COBOL : COMPUTE ROUNDED

Une petite notion de COBOL pour par exemple trouver quelques centimes par ci, quelques centimes par là.

Il s’agit de l’utilisation du paramètre ROUNDED dans l’écriture d’un COMPUTE

Les variables

01 W-NOMBRE1 PIC S9(15)V99 COMP-3.
01 W-NOMBRE2 PIC S9(15)V99 COMP-3.
01 W-MULTIPLICATEUR PIC S9(3)V9(6) COMP-3.
01 W-RESULTAT1 PIC S9(15)V99 COMP-3.
01 W-RESULTAT2 PIC S9(15)V99 COMP-3.
01 W-EDIT9 PIC +ZZZ.ZZZ.ZZZ.ZZZ.ZZ9,99.

Le code d’exemple

DISPLAY '----------ROUNDED DEBUT -------------'
MOVE 123,12 TO W-NOMBRE1
MOVE 567,56 TO W-NOMBRE2
MOVE 456,456789 TO W-MULTIPLICATEUR
MOVE 0 TO W-RESULTAT1
MOVE 0 TO W-RESULTAT2

COMPUTE W-RESULTAT1 ROUNDED = W-NOMBRE1
* W-NOMBRE2
* W-MULTIPLICATEUR

COMPUTE W-RESULTAT2 = W-NOMBRE1
* W-NOMBRE2
* W-MULTIPLICATEUR

MOVE W-RESULTAT1 TO W-EDIT9
DISPLAY 'ROUNDED    : ' W-EDIT9

MOVE W-RESULTAT2 TO W-EDIT9
DISPLAY 'NOT ROUNDED: ' W-EDIT9

MOVE 0 TO W-RESULTAT1
MOVE 0 TO W-RESULTAT2

COMPUTE W-RESULTAT1 ROUNDED = W-NOMBRE1
* W-NOMBRE2
- W-MULTIPLICATEUR

COMPUTE W-RESULTAT2 = W-NOMBRE1
* W-NOMBRE2
- W-MULTIPLICATEUR

MOVE W-RESULTAT1 TO W-EDIT9
DISPLAY 'ROUNDED    : ' W-EDIT9

MOVE W-RESULTAT2 TO W-EDIT9
DISPLAY 'NOT ROUNDED: ' W-EDIT9

DISPLAY '----------ROUNDED FIN -------------'

La sysout

----------ROUNDED DEBUT -------------
ROUNDED    : + 31.896.281,66
NOT ROUNDED: + 31.896.281,65
ROUNDED    : + 69.421,53
NOT ROUNDED: + 69.421,53
----------ROUNDED FIN -------------

Résultats réels

Pour le premier calcul : 31.896.281,6590951

Pour le second : 69421,530411

Conclusion

Comme l’explique la documentation Cobol, ROUNDED arrondi la dernière décimale en l’augmentant de 1 si la décimale suivante en trop dépasse ou est égale à 5. Vrai dans le premier calcul faut dans le second.

Notez que le comportement normal est la troncature des décimaux en trop par rapport à la variable de réception du COMPUTE.

Rollathlon 2017

Retour sur la rollathlon 100 du 18 juin 2017. Publié ici pour en garder une trace dans un espace que je contrôle, écrit le lendemain de la course.

Roll’athlon 100

Un format de course particulier puisque la distance à parcourir est de 103 km sur un mélange voie verte et route ouverte. Un grand merci à l’organisation et aux bénévoles qui permettent à cet événement d’exister !
Pour le déroulement de ma course en particulier, départ vers 7h30 après un réveil à 4h45. Les quelques kilomètres pour rallier le départ à proximité de Motz permettant de s’échauffer. Suivant le conseil de Jonathan, je pars à fond (ou presque) et parvient à accrocher le 2e peloton qui s’est formé derrière celui des favoris de l’épreuve. Profitant d’un fort vent dans le dos, le peloton roule à « tombeau ouvert », un coup d’œil au GPS indiquant souvent des 33 ou 35 km/h. Ce sera le cas sur toute la première moitié du parcours, modulo quelques montées et courtes portions vent de face.
Ensuite, traversée du Rhône pour retourner vers Seyssel par la rive opposée. Le vent de face se fait sentir et la vitesse décroît un peu. Le rythme devient plus irrégulier par moment avec des accélérations conduisant à un tassement du peloton 10s plus tard. Aux alentours des kilomètres 60-65 nous passons sur une longue portion de grattons qui mettra les jambes à mal. Quelques kilomètres plus loin (~68e km), je me fais décrocher soudainement par le peloton. Kilomètre 70 environ, je récupère progressivement d’autres patineurs et nous formons un petit groupe de 4, avançant à allure plus réduite mais de façon régulière en nous relayant. Nous tenons jusqu’aux premières côtes qui font progressivement exploser notre groupe. Les 12 kilomètres précédents la descente vers Seyssel sont les plus durs. Ma vitesse diminue au fur et à mesure que les côtes s’enchaînent; toujours accompagné du vent auquel s’ajoute un début de crampe au-dessus du genou sur l’intérieur, d’abord à gauche, puis à droite et des deux côtés sur la fin de la montée, sans oublier chaleur et mal aux pieds (la plante des pieds commence à s’échauffer dans le patin alors qu’il reste 20km). Quelques quartiers d’orange prélevés aux ravitaillements apportent un « réconfort » temporaire. Les montées s’enchaînent et se succèdent donc jusqu’au kilomètre 98.
Une fois en haut, descente rapide vers Seyssel pour les derniers kilomètres, la vue du pont soulage la fatigue. Je passe l’arrivée content d’être arrivé au bout et d’en avoir terminé définitivement avec les montées (en tout cas pour aujourd’hui, dans 2 semaines, ce sera celle du Mans. Une bonne préparation donc.) Je jette un œil sur ma montre, objectif personnel atteint : course bouclée en moins de 4 heures pour cette première participation.

Au final, je me classe donc 76e au général et 17e en senior avec un temps de 3:57:28.

Sur ce genre de course, il est primordial de s’alimenter régulièrement. De ce côté là, je note de prévoir plus d’emports personnels afin de ne pas trop dépendre des ravitaillements qu’il n’est pas toujours simple de prendre lorsque le peloton ralentit à peine. Ma fin de course me laisse à penser que mon corps était en manque de sucre (et d’eau pour le début de crampe). En bref, ne pas négliger l’alimentation durant la course et améliorer la technique en montée en cherchant à dépenser moins d’énergie pour avancer.

Pour finir, encore une fois merci à ceux qui permettent à cette course formidable d’avoir lieu!

Triathlon d’Obernai 2017 – Distance S

Retour sur le triathlon d’Obernai du 4 juin 2017. Publié ici pour en garder une trace dans un espace que je contrôle, écrit le lendemain de la course.

Après une deuxième place aux régionaux routes en senior il y a trois semaines, changement de sport ce week-end en participant au triathlon d’Obernai, distance S, pour découvrir ce format de course. Enchaînement de trois sports : natation, vélo et enfin course à pied. Un beau parcours et une très bonne organisation.

La grande difficulté de la journée s’est situé du côté de la natation; c’est surprenant lorsqu’on ne l’a jamais vécu et bien loin des séances de natation en piscine. Des gens devant, derrière, sur les côtés, des pieds, des bras dans tous les sens. Au niveau ressenti, j’ai l’impression de mettre laisser enfermé dans la première ligne droite et donc de ne pas avoir nagé au mieux de mes capacités. Le passage de la première bouée fut également compliqué à cause d’un effet entonnoir. Au final, mon temps de nage estimé via montre me donne 11:11 pour 500m (en tri-fonction et donc sans combinaison). Ce qui n’est pas si mal pour 10 séances d’entraînement, une discipline que je devrais donc pouvoir améliorer en continuant de pratiquer régulièrement. Après la nage à Benfeld, direction Obernai en vélo pour rallier le lieu de la course à pied en 21km. De très bonne sensation sur cette partie vélo, tant sur le plat, que dans la petite montée vers Heiligenstein, j’en profite pour mettre la gomme et remonter dans le classement. J’atteins Obernai après 44 minutes de vélo environ pour partir à l’assaut du mont national dans une boucle de 5km de course. N’ayant pas effectué d’entraînements spécifiques sur cette discipline, mon objectif était d’adapter l’allure en fonction des sensations. Au final, pas de surprise, je finis mon tour de course à pied en un peu moins de 25 min, ce qui correspond assez bien à mon allure « habituelle » de 5 minutes au kilomètre.

Pour ce premier triathlon, je me classe donc 95e au classement général et 17e de ma catégorie (S2 -> Senior 2?), avec le détail suivant :
Natation (500m) + transition: 13:52 (159)
(A priori natation 11:11, transition 2:41)
Vélo (21km): 44:42 (64, +95)
Transition Vélo – Course: 01:46
Course à pied: 24:36 (127, -37)
Temps Total: 1:24:56

Une jolie course donc, un peu courte peut-être, mais une bonne distance pour découvrir le triathlon et se présenter sans un entraînement spécifique dans les trois disciplines. Bref, une bonne introduction qui donne envie d’augmenter les distances pour passer au format M et aller affronter la montée du mont Saint-Odile. Affaire à suivre…