Grains

Grains

Facile

Introduction

Il était une fois un serviteur sage qui sauva la vie d'un prince. Le roi promit de payer tout ce que le serviteur pourrait imaginer. Sachant que le roi aimait les échecs, le serviteur lui dit qu'il aimerait recevoir des grains de blé. Un grain sur la première case d'un échiquier, le nombre de grains doublant à chaque case suivante.

Instructions

Calcule le nombre de grains de blé sur un échiquier.

Un échiquier comporte 64 cases. La case 1 contient un grain, la case 2 en contient deux, la case 3 en contient quatre, et ainsi de suite, en doublant à chaque fois.

Écris du code qui calcule :

  • le nombre de grains sur une case donnée
  • le nombre total de grains sur l'échiquier

GNU awk et l'arithmétique à précision arbitraire

Par défaut, les nombres en awk sont représentés par des nombres à virgule flottante en double précision. Cela offre 53 bits de précision (voir la Table 16.3 du manuel). Malheureusement, ce n'est pas suffisant pour venir à bout de cet exercice (attention, spoiler : un test nécessite 63 bits de précision).

« Précision insuffisante » ressemble à ceci :

$ gawk 'BEGIN {
  n = 2 ^ 54
  if (n == n + 1)
    print "not enough precision"
  else
    print "OK"
}'
not enough precision

GNU awk peut utiliser des nombres à précision arbitraire, si les bibliothèques nécessaires ont été compilées dans l'exécutable awk. Vérifie la version de ton awk et cherche « GNU MPFR » :

$ gawk --version
GNU Awk 5.0.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.2.0)
...

Si elle est présente, active cette fonctionnalité avec l'option -M :

$ gawk -M 'BEGIN {
  n = 2 ^ 54
  if (n == n + 1)
    print "not enough precision"
  else
    print "OK"
}'
OK

Et si ton awk ne gère pas -M ? Tu devras alors faire appel à un programme externe capable de faire de l'arithmétique à précision arbitraire, comme bc. Voir la section Utiliser getline pour lire dans une variable depuis un pipe pour un exemple.

Pour aller plus loin : Arithmétique à précision arbitraire

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
AWK Exercism

Prêt à commencer Grains ?

Inscris-toi sur Exercism pour apprendre et maîtriser AWK avec 3 concepts92 exercices, et un vrai mentorat humain, le tout gratuitement.