AMCnumericChoices en base différente de 10 avec partie décimale (Support #823)


Added by Wihl Elm almost 2 years ago. Updated 12 months ago.


Status:Closed Start date:05/07/2022
Priority:High Due date:
Assignee:- % Done:

100%

Category:-
Target version:-

Description

Bonjour,

j'ai un souci avec l'utilisation de AMCnumericChoices dès que j'utilise une base différente de 10 et avec une partie décimale.
Donc j'aimerais savoir si c'est que j'utilise ou comprends mal, ou bien s'il s'agit d'un bug.

Voici mes différents tests et ce que me retourne la compilation quand je génère le corrigé.
  • en base 10 et en base 2,
  • avec une partie décimale dans le nombre ou pas,
  • avec une partie décimale demandée dans l'affichage ou pas.

De ce que je constate, dès que AMCnumericChoices indique une option "decimal" différente de 0 le résulat est faux si la base est différente de 10 (ici juste en base 2 mais j'ai vérifié dans d'autres bases).

Ai-je mal compris l'utilisation de AMCnumericChoices ?
(vu que j'ai déjà mis un moment avant de comprendre que quelle que soit la base demandée, la valeur indiquée en premier paramètre de AMCnumericChoices doit toujours être en base 10...)

Ci-joint mon fichier test et sa compilation

Merci de votre aide.


AMCnumericChoices_tests.pdf (217.3 kB) Wihl Elm, 05/07/2022 03:03 pm

AMCnumericChoices_tests.tex (3.9 kB) Wihl Elm, 05/07/2022 03:05 pm

AMCnumericChoices_tests.pdf (47.3 kB) Wihl Elm, 03/23/2023 02:12 pm


History

Updated by Wihl Elm almost 2 years ago

A priori le fichier source n'est pas passé le voici

Updated by Wihl Elm almost 2 years ago

(Une phrase qui traîne et que j'ai oublié d'effacer "Pourquoi ce résultat")

Updated by Frédéric Bréal almost 2 years ago

Un nombre binaire est-il censé avoir une partie décimale ?

  \begin{questionmultx}{}
    73 - base 2 - avec décimales dans AMCnumericChoices - \textcolor{red}{PAS OK \\
      Résultat indiqué reconverti en base 10 : $29.0\neq73$ faux}
    \begin{center}
      \AMCnumericChoices{73}{digits=12,decimals=5,sign=false,base=2,vertical=true,vhead=true}
    \end{center}
  \end{questionmultx}

Il y a une erreur de compilation sur un nombre trop grand. AMC affiche 928 et ne tient pas compte de la décimale.

À confirmer par Alexis.

Updated by Wihl Elm almost 2 years ago

Je confirme l'erreur quand le nombre est trop grand.
N'importe quelle base B est censée pouvoir écrire des nombres à virgule.
Par exemple en base 2 : 101,01 => 1 x 2^2 + 0 x 2^1 + 1 x 2^0 + 0 x 2^(-1) + 1 x 2^(-2) = 5,25
Mais oui, en pratique aucune calculatrice ne prends la peine de faire des calculs avec virgule comme en base 10, et un microprocesseur utilisera une représentation en virgule flottante de type IEEE754.

Disons que j'aurais préféré une erreur de compilation quand j'essaie de mettre la virgule plutôt qu'un résultat faux :)

Updated by Wihl Elm about 1 year ago

Wihl Elm wrote:

Je confirme l'erreur quand le nombre est trop grand.
N'importe quelle base B est censée pouvoir écrire des nombres à virgule.
Par exemple en base 2 : 101,01 => 1 x 2^2 + 0 x 2^1 + 1 x 2^0 + 0 x 2^(-1) + 1 x 2^(-2) = 5,25
Mais oui, en pratique aucune calculatrice ne prends la peine de faire des calculs avec virgule comme en base 10, et un microprocesseur utilisera une représentation en virgule flottante de type IEEE754.

Disons que j'aurais préféré une erreur de compilation quand j'essaie de mettre la virgule plutôt qu'un résultat faux :)

Je viens de me repencher sur le problème quelques mois après, et j'ai enfin compris ce qu'il se passe.

Un avertissement est bien donné dans la doc, mais juste dans le cadre de l'option "approx" : je pense qu'il faut élargir cet avertissement.

AMCnumericChoices mouline tout en interne en base 10 et sur des nombres entiers. Si l'on demande une conversion en base 2, la conversion n'arrive qu'en toute dernière étape.
La virgule est traitée "artificiellement" en multipliant les nombres avec d chiffres à droite de la virgule par 10^d pour que le nombre devienne entier. La virgule n'est ensuite placée que "visuellement" mais n'est pas utilisée en interne.

Donc voici mon fichier PDF modifié, avec des commentaires qui éclaircissent les problèmes mentionnés, et aussi une astuce pour écrire n'importe quel nombre binaire avec une partie décimale (XXX,YYY) avec AMCnumericChoices.

En résumé, pour coder un nombre binaire (...XXX,YY...) avec x bits à gauche de la virgule et y bits à droite de la virgule :
On le convertit en décimal, on le multiplie par 2^y pour le rendre entier, puis on le divise par 10^y pour le donner à AMCNumericChoices, avec les options "decimal = y, digits = x + y, base = 2"

Par exemple le nombre binaire 11011001,101 (soit 217,625 en base 10) : on calcule 217,625 * 2^3 / 10^3 = 1,741

On le code donc \AMCnumericChoices{1.741}{decimals=3,digits=11,sign=false,base=2,vertical=true}

Updated by Frédéric Bréal about 1 year ago

Bravo et merci pour ce travail.
J'attends de voir si Alexis fera une modification du code sinon je mettrai votre exemple dans la documentation.

Updated by Wihl Elm about 1 year ago

Une dernière précision, le message d'erreur à la compilation mentionné ci-dessus était "Error: number too large, some digits will be discarded". Ce n'est pas parce que le nombre est trop grand par rapport aux capacités internes de AMCNumericChoices, mais parce qu'il n'y a pas assez de digits de prévus dans l'option "digits".

Dans mes tests, je mettais 5 décimales pensant que c'était déjà de la base 2 (donc des bits), or ce sont des décimales en base 10

Le 73 tient sur 7 bits, et avec 5 bits à droite de la virgule ça aurait bien fait 12 (d'où l'option digits=12 que j'avais mise).

Sauf que non, avec decimals=5, 73 est multiplié non pas par 2^5 mais par 10^5, soit 7300000 qui lui tient sur 23 bits ! Et l'erreur disparaît bien à partir de digits=23.

Updated by Alexis Bienvenüe about 1 year ago

Le code est corrigé dans la version de développement pour permettre de coder des nombres à virgule en base différente de 10 : git:946d8f3a8cf702d

  • Status changed from New to Closed
  • % Done changed from 0 to 100

Updated by Wihl Elm 12 months ago

Wow merci beaucoup

Also available in: Atom PDF