<?xml version="1.0" encoding="UTF-8"?>
<quiz>
<question type="category">
  <category>
    <text>$course$/QCM de NSI/Première/Représentation des réels</text>
  </category>
  <info format="html">
    <text><![CDATA[<p>Représentation des nombres réels en machine, virgule fixe et<br/>
virgule flottante, norme IEEE 754, précision et erreurs<br/>
d'arrondi, conséquences pratiques sur les calculs.</p>]]></text>
  </info>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q01 : Type des réels en Python</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quel est le type Python utilisé pour représenter les<br/>
nombres à virgule ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les nombres flottants sont <strong>approchés</strong>. Pour des calculs qui<br/>
doivent rester exacts, comme des montants en centimes, on préfère<br/>
travailler avec des entiers (<code>int</code>).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>number</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>number</code> n'est pas un type Python standard.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>float</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>float</code> (« nombre à virgule<br/>
flottante ») est le type Python pour les nombres<br/>
réels approchés. Par défaut, ils sont codés sur $64$<br/>
bits selon la norme IEEE $754$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>int</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>int</code> est le type des entiers en Python.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>real</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>real</code> n'existe pas en Python (mais existe<br/>
dans certains autres langages comme Pascal).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q02 : Notation scientifique</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>L'écriture <strong>scientifique</strong> d'un nombre réel sépare un<br/>
réel en :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>En base $2$ (binaire), la notation scientifique s'écrit<br/>
$m \times 2^e$, avec une mantisse $m$ entre $1$ et $2$<br/>
et un exposant $e$ entier. C'est exactement ce que fait<br/>
la norme IEEE $754$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une fraction irréductible</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Une fraction irréductible<br/>
(comme $\dfrac{3}{7}$) est<br/>
une autre façon d'écrire<br/>
un rationnel, mais ce n'est<br/>
pas la notation scientifique<br/>
en base deux utilisée par<br/>
les flottants.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une partie entière et une partie décimale</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est plutôt l'écriture habituelle en base<br/>
$10$. La notation scientifique factorise en mantisse<br/>
et exposant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un signe et une valeur absolue</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est une décomposition différente, qui<br/>
n'est pas spécifiquement scientifique.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Une mantisse et un exposant de $10$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : par exemple, $345{,}67 = 3{,}4567 \times 10^2$.<br/>
La mantisse est $3{,}4567$, l'exposant est $2$.<br/>
C'est l'idée de base de la représentation à virgule<br/>
flottante (en base $2$ pour les ordinateurs).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q03 : Norme IEEE 754</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que définit la norme <strong>IEEE $754$</strong> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Avant IEEE $754$, chaque constructeur avait son propre<br/>
format flottant, un même calcul pouvait donner des<br/>
résultats différents selon la machine. La norme a<br/>
uniformisé tout cela.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>La représentation binaire des flottants</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la norme IEEE $754$ ($1985$, révisée<br/>
en $2008$ et $2019$) standardise les formats de<br/>
flottants : simple précision (<code>float</code>, $32$ bits),<br/>
double précision (<code>double</code>, $64$ bits) et plus.<br/>
Pratiquement tous les processeurs respectent cette<br/>
norme.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La connectique des câbles réseau</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun rapport. La connectique des câbles réseau relève<br/>
d'autres normes, sans lien avec la représentation des nombres.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le format des adresses IP</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le format des adresses IP est fixé par les protocoles<br/>
d'internet. IEEE $754$ concerne les réels.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le format standard des fichiers PDF</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le format PDF est défini par sa propre spécification. Il<br/>
n'a aucun lien avec la norme IEEE $754$, qui concerne uniquement<br/>
les nombres flottants.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q04 : Approximation des réels</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pourquoi les réels stockés en machine sont-ils en général<br/>
des <strong>approximations</strong> plutôt que des valeurs exactes ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>C'est une limite <strong>fondamentale</strong> : aucun ordinateur,<br/>
quelle que soit sa puissance, ne peut représenter<br/>
exactement tous les réels. Il faut donc choisir un<br/>
compromis sur la précision et l'étendue.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Parce qu'il y a une infinité de nombres réels mais une mémoire finie</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on ne peut représenter qu'un nombre<br/>
fini de valeurs en mémoire finie. La plupart des<br/>
réels (par exemple $\pi$, $\sqrt{2}$) doivent être<br/>
approchés. Même certains nombres « simples » comme<br/>
$0{,}1$ n'ont pas de représentation binaire finie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que les ordinateurs sont mal conçus</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce n'est pas un défaut de conception, c'est<br/>
une nécessité mathématique.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce qu'il faut moins de mémoire</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est pour des raisons mathématiques<br/>
fondamentales, pas seulement d'optimisation.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que les flottants sont plus rapides que les entiers</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les flottants sont en réalité plus lents<br/>
que les entiers sur la plupart des processeurs.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q05 : Calcul flottant en Python</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie l'expression Python <code>0.1 + 0.2</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>$0{,}1$ en binaire vaut<br/>
$0{,}0001100110011\ldots$ (motif périodique infini).<br/>
L'arrondi à un nombre fini de bits crée une petite<br/>
erreur, qui se propage dans les calculs.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur Python</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucune erreur, le calcul est valide. Mais<br/>
son résultat n'est pas exactement $0{,}3$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Exactement $0{,}3$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $0{,}1$ et $0{,}2$ n'ont pas de<br/>
représentation binaire <strong>finie</strong> (comme $1/3$ en<br/>
base $10$). Leur somme contient donc une erreur<br/>
d'arrondi.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$0{,}29999\ldots$ (donc sans la moindre erreur)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la valeur exacte stockée est légèrement<br/>
<strong>supérieure</strong> à $0{,}3$, pas inférieure.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Proche de $0{,}3$, avec une erreur d'arrondi</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est l'exemple emblématique des<br/>
pièges du calcul flottant. Pour comparer des<br/>
flottants, on utilise typiquement<br/>
<code>abs(a - b) &lt; epsilon</code>.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q06 : Comparer deux flottants</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pour tester si deux flottants <code>a</code> et <code>b</code> sont « égaux »<br/>
en Python, la bonne pratique est :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Cette précaution est essentielle dans tous les calculs<br/>
scientifiques. Les comparaisons strictes de flottants<br/>
sont une source classique de bugs subtils.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>a == b</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : à cause des erreurs d'arrondi, deux<br/>
flottants qui devraient être égaux peuvent<br/>
légèrement différer. <code>==</code> est trop strict.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>round(a, 2) == round(b, 2)</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un arrondi ne joue pas le rôle d'une<br/>
tolérance. Deux flottants très proches mais situés de<br/>
part et d'autre d'une frontière d'arrondi (comme<br/>
$1{,}004\,999$ et $1{,}005\,001$) sont déclarés<br/>
différents, alors que deux valeurs qui s'écartent de<br/>
presque un centième sont déclarées égales.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>abs(a - b) &lt; epsilon</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on compare l'écart à une <strong>tolérance</strong><br/>
<code>epsilon</code> choisie petite (par exemple $10^{-9}$), au<br/>
lieu d'exiger une égalité exacte. Le choix<br/>
d'<code>epsilon</code> dépend du contexte.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>int(a) == int(b)</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>int</code> supprime la partie décimale, ce qui ne mesure pas<br/>
l'écart : <code>int(2.1) == int(2.9)</code> vaut <code>True</code> alors que les deux<br/>
flottants diffèrent de $0{,}8$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q07 : Virgule fixe</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est la différence entre une représentation à<br/>
<strong>virgule fixe</strong> et une représentation à <strong>virgule flottante</strong> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Cas typique de virgule fixe : la finance, où on<br/>
manipule des montants à deux décimales, et on veut<br/>
éviter les erreurs d'arrondi sur l'argent. On stocke<br/>
alors les montants en centimes (entiers).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Fixe = décimales constantes, flottante = précision relative</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : avec virgule fixe, par exemple<br/>
deux décimales, on peut représenter $0{,}01$ à<br/>
$9999{,}99$. Avec virgule flottante, l'exposant<br/>
permet d'aller de très petit ($10^{-300}$) à très<br/>
grand ($10^{300}$), au prix d'une précision relative.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La virgule fixe n'existe que sur les vieux ordinateurs</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la virgule fixe est encore utilisée<br/>
aujourd'hui (par exemple en finance pour des<br/>
montants en centimes).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Aucune différence en pratique</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les différences sont importantes,<br/>
notamment pour des applications spécifiques.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La virgule fixe est plus précise pour les très grands nombres</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est plutôt la virgule flottante qui gère<br/>
mieux les très grands ou très petits nombres<br/>
(grâce à l'exposant variable).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q08 : Taille d'un float Python</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>En Python, sur combien de bits est stocké un <code>float</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Avec $64$ bits, on ne peut coder qu'un nombre fini de valeurs : la<br/>
plupart des réels, comme $0{,}1$, ne sont donc stockés que de façon<br/>
approchée.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$128$ bits</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la quadruple précision ($128$ bits) existe<br/>
mais n'est pas le standard de Python.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$64$ bits</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : Python utilise par défaut la double<br/>
précision IEEE $754$, soit $64$ bits ($1$ pour le<br/>
signe, $11$ pour l'exposant, $52$ pour la mantisse).<br/>
Cela donne environ $15$ à $17$ chiffres décimaux<br/>
significatifs.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$8$ bits</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : trop peu pour représenter une plage utile<br/>
de réels.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$32$ bits</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la <strong>simple précision</strong> (le type<br/>
<code>float</code> du langage C). Python utilise par défaut la<br/>
double précision.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q09 : Écrire un quart en base deux</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est l'écriture en base $2$ du nombre décimal $0{,}25$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Après la virgule, les rangs en base $2$ valent $\frac{1}{2}$,<br/>
$\frac{1}{4}$, $\frac{1}{8}$, etc. Comme $0{,}25 = \frac{1}{4} = 2^{-2}$,<br/>
son écriture binaire est finie et courte : $0{,}01_2$. Ce nombre<br/>
est donc stocké exactement dans un flottant, contrairement à<br/>
$0{,}1$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$0{,}1_2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $0{,}1_2$ vaut $2^{-1} = 0{,}5$. Le premier chiffre<br/>
après la virgule compte les demis, or $0{,}25$ est plus petit<br/>
qu'un demi.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$0{,}01_2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : $0{,}25 = \frac{1}{4} = 2^{-2}$. On a<br/>
$0{,}25 \times 2 = 0{,}5$ (chiffre $0$), puis $0{,}5 \times 2 = 1$ (chiffre $1$) : l'écriture s'arrête là.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$0{,}11_2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $0{,}11_2$ vaut $0{,}5 + 0{,}25 = 0{,}75$. Le rang des<br/>
demis doit rester à $0$, puisque $0{,}25$ est plus petit qu'un demi.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$0{,}25_2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : en base $2$, seuls les chiffres $0$ et $1$ existent. On<br/>
ne recopie pas l'écriture décimale après la virgule.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q10 : Deux assertions sur des moyennes</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pour tester une fonction <code>moyenne</code>, on exécute le<br/>
programme suivant :</p>
<pre><code>def moyenne(a, b):
    return (a + b) / 2

assert moyenne(0.25, 0.75) == 0.5
assert moyenne(0.1, 0.2) == 0.15</code></pre>
<p>Que se passe-t-il ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un nombre a une écriture binaire finie seulement<br/>
s'il est une somme d'un nombre fini de puissances<br/>
de $2$, comme $0{,}75 = 2^{-1} + 2^{-2}$. Ce n'est<br/>
pas le cas de $0{,}1 = 0{,}0001100110011\ldots_2$,<br/>
qui est arrondi. Pour tester un résultat flottant,<br/>
on compare l'écart à une tolérance :<br/>
<code>assert abs(moyenne(0.1, 0.2) - 0.15) &lt; 1e-9</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Les deux assertions sont vérifiées, le programme se termine sans erreur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $0{,}1$ et $0{,}2$ n'ont pas d'écriture<br/>
binaire finie, ils sont stockés arrondis. Leur<br/>
moyenne vaut <code>0.15000000000000002</code>, et l'égalité<br/>
avec <code>0.15</code> est fausse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>La première assertion est vérifiée, la seconde lève <code>AssertionError</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : $0{,}25 = 0{,}01_2$ et<br/>
$0{,}75 = 0{,}11_2$ s'écrivent exactement en<br/>
binaire, donc la première moyenne vaut<br/>
exactement $0{,}5$. En revanche, $0{,}1$ et $0{,}2$<br/>
sont arrondis : leur moyenne vaut<br/>
<code>0.15000000000000002</code>, et la seconde égalité est<br/>
fausse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La première assertion lève <code>AssertionError</code> et arrête le programme</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $0{,}25$, $0{,}75$ et $0{,}5$ sont des sommes<br/>
de puissances de $2$ ($0{,}01_2$, $0{,}11_2$ et<br/>
$0{,}1_2$) : ils sont représentés exactement, et<br/>
la première égalité est vraie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Python refuse d'évaluer <code>==</code> entre deux flottants et lève une erreur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>==</code> s'applique aux flottants comme aux<br/>
entiers. Il est seulement déconseillé, car deux<br/>
calculs censés donner la même valeur peuvent<br/>
différer à cause des arrondis.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q11 : Erreur d'arrondi cumulative</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que peut-il se passer si on additionne plusieurs millions<br/>
de petits flottants entre eux ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un exemple frappant : additionner dix fois <code>0.1</code> dans une boucle<br/>
<code>for</code> donne <code>0.9999999999999999</code>, pas $1{,}0$, à cause des erreurs<br/>
cumulées. Pour des montants, on compte en centimes avec des<br/>
entiers.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le résultat est exact, comme une somme d'entiers</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : chaque addition introduit une petite erreur<br/>
d'arrondi. Sur des millions d'opérations, ces<br/>
erreurs s'accumulent.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le calcul devient infiniment lent</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la vitesse n'est pas l'enjeu. C'est la<br/>
précision qui se dégrade.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Python lève une erreur de précision</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucune erreur n'est levée. Les calculs<br/>
flottants sont silencieusement approximatifs.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Les erreurs d'arrondi s'accumulent et faussent le résultat</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est un piège classique en calcul scientifique.<br/>
Chaque addition arrondit un peu, et sur des millions d'opérations<br/>
ces écarts s'additionnent. Quand c'est possible, on travaille avec<br/>
des entiers, qui restent exacts.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q12 : Un prix calculé qui échappe au test</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un programme compte les articles vendus $0{,}30$ euro :</p>
<pre><code>prix = [0.1 + 0.2, 0.5, 0.3]
compte = 0
for p in prix:
    if p == 0.3:
        compte = compte + 1
print(compte)</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le programme illustre la règle : il faut éviter de tester l'égalité<br/>
de deux flottants. Avec la condition <code>abs(p - 0.3) &lt; 1e-9</code>, les<br/>
deux prix de $0{,}30$ euro seraient comptés.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>2</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>0.1 + 0.2</code> ne vaut pas <code>0.3</code> en Python mais<br/>
<code>0.30000000000000004</code>. Le test <code>p == 0.3</code> est donc faux pour le<br/>
premier prix, et seul le dernier est compté.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>1</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : seul le dernier prix, écrit directement <code>0.3</code>,<br/>
passe le test. Le premier, calculé, vaut <code>0.30000000000000004</code> et<br/>
échoue à l'égalité stricte.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>0</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'égalité entre flottants n'est pas toujours fausse. Le<br/>
dernier élément de la liste et le littéral <code>0.3</code> du test sont<br/>
exactement le même flottant, le test réussit pour ce prix.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, car <code>==</code> ne compare pas des flottants</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>==</code> s'applique aux flottants et renvoie un booléen. Le<br/>
programme s'exécute sans erreur ; c'est le résultat du test qui<br/>
surprend.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q13 : Valeur décimale d'une écriture binaire à virgule</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est la valeur décimale du nombre écrit en base $2$ :<br/>
$110{,}01_2$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Chaque rang a un poids : des puissances de $2$ avant la virgule, puis<br/>
$\frac{1}{2}$, $\frac{1}{4}$, $\frac{1}{8}$ après. On additionne<br/>
les poids des chiffres $1$ : $4 + 2 + \frac{1}{4} = 6{,}25$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$6{,}01$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la partie entière $110_2 = 6$ est juste, mais les<br/>
chiffres après la virgule ne se recopient pas : $0{,}01_2$ vaut<br/>
$0{,}25$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$6{,}5$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $0{,}01_2$ n'est pas un demi. Chaque rang après la<br/>
virgule a son poids, $\frac{1}{2}$, $\frac{1}{4}$, $\frac{1}{8}$,<br/>
d'où $0{,}25$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$6{,}25$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : $110_2 = 4 + 2 = 6$ et<br/>
$0{,}01_2 = 0 \times \frac{1}{2} + 1 \times \frac{1}{4} = 0{,}25$,<br/>
soit $6{,}25$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$3{,}25$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on a lu la partie entière à l'envers, comme<br/>
$011_2 = 3$. Le chiffre de gauche a le poids le plus fort :<br/>
$110_2 = 4 + 2 = 6$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q15 : Calcul financier</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pour un calcul financier (additionner des centimes),<br/>
quel choix est le plus prudent en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les erreurs d'arrondi des <code>float</code> sont inacceptables pour des<br/>
montants : la précision doit être garantie au centime. Compter en<br/>
centimes avec des entiers supprime le problème.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Utiliser des <code>float</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les flottants accumulent des erreurs<br/>
d'arrondi qui peuvent fausser des montants en<br/>
centimes. Mauvaise pratique financière.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Utiliser des nombres complexes en Python</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun rapport avec les nombres complexes.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Stocker les montants en centimes entiers</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les entiers sont exacts en Python. On compte en<br/>
centimes et on ne convertit en euros qu'au moment de l'affichage.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Utiliser des chaînes de caractères</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on ne peut pas faire d'arithmétique<br/>
directement sur des chaînes en Python.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q16 : Conversion entier vers flottant</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>En Python, l'instruction <code>float(7)</code> renvoie :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Inversement, <code>int(7.9)</code> renvoie $7$ (troncature, pas<br/>
arrondi). Pour arrondir, on utilise <code>round(7.9)</code> qui<br/>
renvoie $8$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>7</code> (entier inchangé)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction <code>float</code> change le type. Le<br/>
résultat est <code>7.0</code>, qui est un flottant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>7.0</code> (flottant)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la conversion d'un entier en<br/>
flottant ajoute « .0 ». Le type passe de <code>int</code> à<br/>
<code>float</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucune erreur, c'est une conversion<br/>
standard.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>'7'</code> (chaîne de caractères)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>float()</code> convertit en flottant, pas en<br/>
chaîne. Pour une chaîne, on utiliserait <code>str(7)</code>.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q17 : Perte de signification</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pourquoi <code>(1e16 + 1) - 1e16</code> donne-t-il $0$ en Python<br/>
au lieu de $1$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Pour éviter ce piège : reformuler les calculs pour<br/>
éviter de soustraire des nombres très proches, ou<br/>
passer en précision étendue. C'est un problème<br/>
classique du calcul numérique scientifique.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$1$ est négligeable face à $10^{16}$ pour la mantisse</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la double précision a environ $16$<br/>
chiffres significatifs. Quand on ajoute $1$ à<br/>
$10^{16}$, le $1$ est « écrasé » par les erreurs<br/>
d'arrondi. C'est la <strong>perte de signification</strong><br/>
(<em>loss of significance</em>).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que Python ne sait pas additionner</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : Python sait additionner. La limitation<br/>
vient du format de représentation des flottants.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que les nombres trop grands sont arrondis à zéro</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce n'est pas l'arrondi à zéro, c'est plus<br/>
subtil : c'est la précision relative limitée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>C'est un bug de Python</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce n'est pas un bug, c'est un comportement<br/>
attendu et défini par IEEE $754$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q18 : Forme normalisée</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>En base $2$, la notation scientifique <strong>normalisée</strong> d'un réel non<br/>
nul a la forme :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>C'est l'analogue de la notation scientifique décimale, où l'on écrit<br/>
$350 = 3{,}5 \times 10^{2}$ avec un seul chiffre non nul avant la<br/>
virgule. En base $2$, ce chiffre ne peut être que $1$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$0{,}m \times 2^e$ avec $m$ quelconque</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la forme normalisée place un seul chiffre, qui vaut $1$,<br/>
avant la virgule : sa mantisse est comprise entre $1$ et $2$, pas<br/>
entre $0$ et $1$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$1{,}m \times 2^e$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : en binaire, le premier chiffre non nul d'un nombre<br/>
est toujours $1$. On place la virgule juste après ce $1$ et on<br/>
compense par la puissance de $2$ : par exemple<br/>
$6 = 110_2 = 1{,}1_2 \times 2^{2}$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$m \times 10^e$ avec $m$ et $e$ entiers</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la base est $2$, pas $10$. Et la mantisse<br/>
n'est pas toujours entière.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$m + e$ (somme)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la mantisse et l'exposant ne s'additionnent<br/>
pas, ils se combinent par produit ($m \times 2^e$).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q19 : Non-associativité de l'addition flottante</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>En arithmétique flottante, l'addition est-elle toujours<br/>
<strong>associative</strong> (c'est-à-dire $(a + b) + c = a + (b + c)$) ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Cette non-associativité a des implications concrètes :<br/>
en parallélisme, des sommes massives peuvent donner<br/>
des résultats légèrement différents selon l'ordre de<br/>
réduction. En science du calcul, on cherche des<br/>
algorithmes qui minimisent cette dépendance.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Cela dépend du système d'exploitation</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pas de lien avec le système.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Cela dépend du langage de programmation</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est une propriété de la norme IEEE $754$,<br/>
indépendante du langage.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Non, l'ordre des additions change le résultat</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : par exemple,<br/>
<code>(1e16 + 1) - 1e16 = 0</code> mais <code>(1e16 - 1e16) + 1 = 1</code>.<br/>
Ce détail est crucial en programmation parallèle :<br/>
additionner dans un ordre différent peut donner un<br/>
résultat différent.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Oui, exactement comme pour les entiers</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est une croyance répandue mais fausse !<br/>
À cause des arrondis, l'ordre des additions peut<br/>
changer le résultat.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q20 : Décimal vs binaire</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pourquoi $0{,}5$ a une représentation binaire <strong>exacte</strong>,<br/>
mais pas $0{,}1$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>C'est l'analogue de $1/3 = 0{,}333\ldots$ en base $10$. Toute base<br/>
privilégie certaines fractions et en désavantage d'autres. Pour des<br/>
montants, compter en centimes avec des entiers évite ce problème.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que $0{,}5$ est plus grand que $0{,}1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucune raison liée à la taille relative.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que $0{,}5$ est utilisé plus souvent</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fréquence d'usage n'a rien à voir avec<br/>
la représentabilité.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que $0{,}5$ a un seul chiffre, $0{,}1$ aussi</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est en base $10$. En binaire, la<br/>
longueur des deux écritures est très différente.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$0{,}5 = 2^{-1}$ est une puissance de $2$, pas $0{,}1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : en base $2$, seules les fractions<br/>
dont le dénominateur est une puissance de $2$<br/>
(ou des sommes de telles fractions) ont une<br/>
représentation <strong>finie</strong>. Pour $1/10$, on obtient<br/>
$0{,}0001100110011\ldots_2$, périodique infini.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q23 : Propagation des erreurs</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Avec des flottants, quel calcul fait perdre le plus de chiffres<br/>
significatifs exacts parmi les suivants ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Exemple : en Python, <code>1.0000001 - 1.0</code> affiche<br/>
<code>1.0000000005838672e-07</code> au lieu de <code>1e-07</code>. Les chiffres de tête<br/>
communs s'annulent, et il ne reste que des chiffres dont une partie<br/>
provient des erreurs d'arrondi.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$a - b$ avec $a$ et $b$ très proches</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : si $a$ et $b$ sont très proches,<br/>
leur différence a beaucoup moins de chiffres<br/>
significatifs que $a$ ou $b$. Les erreurs d'arrondi<br/>
deviennent dominantes par rapport au résultat.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a + b$ pour $a$ et $b$ de même signe</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ajouter deux nombres de même signe conserve les premiers<br/>
chiffres du résultat ; les erreurs d'arrondi restent petites<br/>
devant lui.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a \times b$ pour $a$ et $b$ proches de $1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : multiplier deux nombres proches de $1$ donne un résultat<br/>
proche de $1$, dont les erreurs d'arrondi restent du même ordre que<br/>
celles des facteurs.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a / b$ quand $b$ est grand</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : diviser par un grand nombre donne un petit résultat, mais<br/>
ses chiffres significatifs restent aussi exacts que ceux de $a$ et<br/>
$b$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q24 : Une tolérance mal dimensionnée</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Sarah compare deux flottants avec une tolérance fixe :<br/>
<pre><code>def proches(a, b):
    return abs(a - b) &lt; 1e-9

print(proches(1e-12, 2e-12))</code></pre><br/>
Le programme affiche <code>True</code>, alors que <code>2e-12</code> est le<br/>
double de <code>1e-12</code>. Comment expliquer ce résultat ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une tolérance absolue ne vaut que pour un ordre de grandeur<br/>
donné : $10^{-9}$ convient pour des valeurs proches de $1$,<br/>
mais tout écart entre des valeurs de l'ordre de $10^{-12}$<br/>
lui est inférieur. Quand l'ordre de grandeur n'est pas connu<br/>
d'avance, on compare l'écart à une fraction des valeurs<br/>
elles-mêmes (tolérance relative).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>La tolérance $10^{-9}$ est énorme devant les valeurs comparées, il faut l'adapter à leur ordre de grandeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'écart réel vaut $10^{-12}$, mille fois<br/>
plus petit que la tolérance, donc le test réussit quelle<br/>
que soit la différence entre <code>a</code> et <code>b</code>. Une tolérance<br/>
fixe n'a de sens que pour des valeurs d'ordre de grandeur<br/>
connu ; sinon, on la rend relative, par exemple<br/>
<code>abs(a - b) &lt; 1e-9 * abs(b)</code>, qui renvoie ici <code>False</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Les deux valeurs sont plus petites que le plus petit flottant représentable et valent donc toutes deux <code>0.0</code> en machine</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un flottant $64$ bits descend jusqu'à environ<br/>
$10^{-308}$, bien en dessous de $10^{-12}$. Les deux<br/>
valeurs sont représentées et distinctes : <code>1e-12 == 2e-12</code><br/>
renvoie <code>False</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La soustraction de deux flottants aussi proches subit une annulation et renvoie exactement <code>0.0</code>, d'où un écart nul</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>1e-12 - 2e-12</code> renvoie <code>-1e-12</code>, un écart non<br/>
nul. L'annulation qui menace une soustraction concerne<br/>
des valeurs presque égales, pas des valeurs du simple au<br/>
double.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le test est correct, car deux flottants qui diffèrent de moins de $10^{-9}$ sont indiscernables pour la machine</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la machine distingue parfaitement <code>1e-12</code> et<br/>
<code>2e-12</code> ; l'indiscernabilité ne concerne que des écarts<br/>
relatifs de l'ordre de $10^{-16}$. C'est le seuil choisi<br/>
par Sarah qui est inadapté, pas la représentation.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q25 : Synthèse sur les flottants</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Parmi les énoncés suivants, lequel est <strong>vrai</strong> sur les<br/>
nombres flottants en machine ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Connaître les flottants permet d'éviter des bugs<br/>
subtils mais critiques dans les calculs scientifiques,<br/>
financiers, et même dans des programmes ordinaires<br/>
qui manipulent des nombres réels.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La précision des flottants augmente avec la taille du nombre</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la précision <strong>relative</strong> est constante,<br/>
mais l'erreur <strong>absolue</strong> augmente avec la taille<br/>
du nombre. Plus un nombre est grand, plus l'écart<br/>
entre deux flottants consécutifs est grand.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Les calculs flottants sont aussi précis que les calculs sur papier</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on a vu de nombreux contre-exemples<br/>
(associativité, perte de signification, etc.). Les<br/>
calculs flottants sont approchés.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Le test <code>==</code> entre flottants est piégeux, préférer une tolérance</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est l'enseignement le plus<br/>
pratique de tout ce chapitre. À cause des erreurs<br/>
d'arrondi, deux flottants qui devraient être égaux<br/>
peuvent légèrement différer. Toujours préférer une<br/>
comparaison à une tolérance, du type<br/>
<code>abs(a - b) &lt; epsilon</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Les flottants peuvent représenter exactement tous les nombres rationnels</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la plupart des rationnels (par exemple<br/>
$1/3$, $1/10$) n'ont pas de représentation finie<br/>
en binaire. Seul un sous-ensemble fini est<br/>
exactement représenté.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q26 : Conversion décimal vers binaire avec virgule</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est l'écriture binaire de $6{,}625$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Méthode pour la partie fractionnaire : on multiplie par $2$<br/>
et on note la partie entière du résultat (bit $0$ ou $1$),<br/>
puis on continue avec la partie fractionnaire restante,<br/>
jusqu'à obtenir $0$ ou repérer un cycle. Pour $0{,}625$, on<br/>
obtient $0{,}101_2$ exactement, car $0{,}625 = 0{,}5 + 0{,}125 = 2^{-1} + 2^{-3}$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$1010{,}101$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $1010_2 = 10$, pas $6$. Confusion sur la partie<br/>
entière : $6 = 4 + 2 = 110_2$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$110{,}625$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on a juxtaposé l'écriture décimale de la partie<br/>
fractionnaire à la partie entière en binaire. La partie<br/>
décimale doit elle aussi être convertie en base $2$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$110{,}100$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $0{,}100_2$ vaut $0{,}5$, ce qui ne correspond pas<br/>
à $0{,}625$. Il faut poursuivre les multiplications par $2$<br/>
jusqu'à épuiser la partie fractionnaire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$110{,}101$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la partie entière donne $6 = 110_2$. La<br/>
partie fractionnaire se calcule par multiplications<br/>
successives par $2$ : $0{,}625 \times 2 = 1{,}25$ (bit $1$), puis $0{,}25 \times 2 = 0{,}5$ (bit $0$), puis $0{,}5 \times 2 = 1{,}0$ (bit $1$). On obtient<br/>
$0{,}101_2$, d'où $110{,}101_2$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q27 : Décimal sans écriture binaire finie</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Parmi les réels suivants (écrits en base $10$), lequel n'a<br/>
<strong>pas</strong> une écriture finie en base $2$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un nombre décimal $\dfrac{p}{q}$ irréductible a une<br/>
écriture binaire finie si et seulement si $q$ est une<br/>
puissance de $2$. Pour $0{,}1 = \dfrac{1}{10}$,<br/>
$q = 10 = 2 \times 5$ contient un facteur $5$, ce qui<br/>
provoque le caractère infini en base $2$. Cette<br/>
observation explique pourquoi tant de calculs simples en<br/>
apparence ($0{,}1 + 0{,}2$) deviennent imprécis sur<br/>
machine.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$0{,}1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : $0{,}1$ ne s'exprime pas comme une somme<br/>
finie de puissances négatives de $2$. Son écriture<br/>
binaire est périodique :<br/>
$0{,}0001100110011\ldots_2$. C'est précisément la cause<br/>
de l'écart entre <code>0.1 + 0.2</code> et <code>0.3</code> en flottant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$0{,}75$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $0{,}75 = 0{,}5 + 0{,}25 = 2^{-1} + 2^{-2}$,<br/>
donc son écriture binaire est $0{,}11_2$, finie sur<br/>
deux bits.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$0{,}25$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $0{,}25 = 2^{-2}$, donc son écriture binaire est<br/>
$0{,}01_2$, finie sur deux bits.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$0{,}5$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $0{,}5 = 2^{-1}$, donc son écriture binaire est<br/>
$0{,}1_2$, finie sur un seul bit fractionnaire.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q28 : Exposant biaisé en simple précision</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Le réel $5{,}5$ s'écrit en notation scientifique binaire<br/>
$5{,}5 = 1{,}011_2 \times 2^{2}$. Dans le format simple précision,<br/>
l'exposant n'est pas stocké tel quel : on lui ajoute $127$ avant de<br/>
l'écrire sur huit bits. Quelle suite de huit bits est stockée dans<br/>
ce champ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Ajouter $127$ permet de ranger aussi les exposants négatifs dans un<br/>
champ de huit bits sans signe : un exposant réel $-1$ est stocké<br/>
$126$. Pour relire l'exposant, on retire $127$ à la valeur stockée.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$00000010_2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $00000010_2 = 2$ est l'exposant <strong>réel</strong>, écrit sans lui<br/>
ajouter $127$ comme le demande le format.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$01111101_2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $01111101_2 = 125$ ; on a soustrait $127$ au lieu de<br/>
l'ajouter ($2 - 127 = -125$, puis on a oublié le signe). Le champ<br/>
contient $2 + 127 = 129$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$10000010_2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $10000010_2 = 130$, soit $2 + 128$. Le décalage du format<br/>
vaut $127$ et non $128$ : le champ contient $129$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$10000001_2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'exposant stocké est $2 + 127 = 129 = 128 + 1$, ce<br/>
qui s'écrit $10000001_2$ sur huit bits.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q29 : Décoder un flottant simple précision</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un flottant est codé sur $32$ bits en simple précision :<br/>
<pre><code>0 | 10000001 | 01000000000000000000000</code></pre><br/>
Le premier bit est le signe ; les $8$ bits suivants contiennent<br/>
l'exposant augmenté de $127$ ; les $23$ derniers contiennent les<br/>
chiffres après la virgule de la mantisse $1{,}\ldots_2$, dont le<br/>
$1$ de tête n'est pas stocké. Quelle est la valeur décimale<br/>
représentée ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Décodage en trois étapes : lire le bit de signe ; lire l'exposant<br/>
stocké $E$ et calculer $e = E - 127$ ; rétablir le $1$ devant les<br/>
chiffres de la mantisse, puis calculer<br/>
$(-1)^s \times 1{,}M_2 \times 2^e$. Ici :<br/>
$(-1)^0 \times 1{,}25 \times 2^{2} = 5$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on a oublié de rétablir le $1$ non stocké devant la<br/>
virgule. La mantisse vaut $1{,}01_2 = 1{,}25$ et non<br/>
$0{,}01_2 = 0{,}25$ : la valeur est $1{,}25 \times 2^{2} = 5$, pas<br/>
$0{,}25 \times 2^{2} = 1$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$5$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : signe <code>0</code> (positif), exposant<br/>
$10000001_2 = 129$, donc $e = 129 - 127 = 2$. Mantisse<br/>
$1{,}01_2 = 1{,}25$. Valeur : $1{,}25 \times 2^{2} = 5$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$10$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $10 = 1{,}25 \times 2^{3}$, l'exposant réel a été surestimé<br/>
d'une unité. L'exposant stocké vaut $129$, donc $e = 2$ et le<br/>
facteur est $2^{2} = 4$, pas $2^{3} = 8$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$-5$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le bit de signe vaut $0$ (positif). Le résultat<br/>
est $+5$, pas $-5$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q30 : Répartition des bits d'un flottant double précision</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un <code>float</code> de Python suit le format double précision de la norme<br/>
IEEE $754$, sur $64$ bits. Comment ces bits se répartissent-ils ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Simple précision : $1$, $8$ et $23$ bits sur $32$. Double précision :<br/>
$1$, $11$ et $52$ bits sur $64$. Python utilise la seconde pour tous<br/>
ses <code>float</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$1$ bit de signe, $11$ bits d'exposant, $52$ bits de mantisse</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : $1 + 11 + 52 = 64$. Les $52$ bits de mantisse,<br/>
complétés par le $1$ implicite de tête, donnent environ seize<br/>
chiffres décimaux significatifs.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$1$ bit de signe, $8$ bits d'exposant, $23$ bits de mantisse</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ces trois champs totalisent $32$ bits. C'est la<br/>
répartition de la simple précision, pas celle du <code>float</code> de<br/>
Python.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$32$ bits pour la partie entière, $32$ bits pour la partie décimale</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce découpage décrit une virgule fixe. Un flottant<br/>
sépare signe, exposant et mantisse, ce qui permet à la virgule<br/>
de se déplacer selon la grandeur du nombre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$1$ bit de signe, $31$ bits d'exposant, $32$ bits de mantisse</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la somme fait bien $64$, mais l'exposant n'occupe que<br/>
$11$ bits. La majeure partie du mot, $52$ bits, est réservée à<br/>
la mantisse, qui fixe la précision.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q31 : Exposant biaisé en double précision</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>En double précision (norme IEEE $754$ sur $64$ bits), l'exposant<br/>
est stocké sur $11$ bits, augmenté du biais $1023$. Quel champ<br/>
d'exposant représente le réel $2^{5}$, c'est-à-dire<br/>
$1{,}0_2 \times 2^{5}$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le biais dépend de la taille du champ d'exposant : $127$ pour<br/>
$8$ bits, $1023$ pour $11$ bits. Dans les deux cas, la valeur<br/>
stockée est l'exposant réel augmenté du biais.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$10000000100_2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on stocke $5 + 1023 = 1028$, soit<br/>
$10000000100_2$ sur onze bits.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$00000000101_2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'exposant n'est pas stocké tel quel. Le biais permet<br/>
de représenter aussi les exposants négatifs sans bit de signe<br/>
supplémentaire : il faut stocker $5 + 1023 = 1028$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$01111111010_2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le biais s'ajoute à l'exposant, il ne s'en retranche<br/>
pas. La valeur $1023 - 5 = 1018$ représenterait<br/>
$2^{-5}$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$00010000100_2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $127$ est le biais de la simple précision, dont<br/>
l'exposant tient sur $8$ bits. En double précision, le biais<br/>
vaut $1023$ et $127 + 5 = 132$ n'a pas de sens.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q32 : Écart entre deux flottants consécutifs</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>En simple précision, la mantisse compte $23$ chiffres binaires<br/>
après la virgule. Tous les flottants compris entre $2^{3}$ et<br/>
$2^{4}$ partagent l'exposant $3$. Quel est l'écart entre deux<br/>
flottants consécutifs de cet intervalle ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>La précision d'un flottant est relative : l'écart entre deux<br/>
valeurs consécutives vaut $2^{-23}$ fois la puissance de deux de<br/>
l'intervalle. Près de $1$, les flottants sont espacés d'environ<br/>
$10^{-7}$ ; près de $10^{6}$, d'environ $0{,}06$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$2^{-20}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : dans cet intervalle, la valeur s'écrit<br/>
$1{,}m_2 \times 2^{3}$ et le dernier chiffre de la mantisse<br/>
pèse $2^{-23}$. Deux flottants consécutifs diffèrent donc de<br/>
$2^{-23} \times 2^{3} = 2^{-20}$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$2^{-21}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le $1$ implicite de tête se trouve avant la virgule,<br/>
il n'ajoute pas un vingt-quatrième chiffre après elle. Le<br/>
dernier chiffre pèse $2^{-23}$, d'où un écart de $2^{-20}$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$2^{-26}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'exposant $3$ multiplie l'écart, il ne le divise<br/>
pas. Les flottants sont d'autant plus espacés qu'ils sont<br/>
grands : $2^{-23} \times 2^{3} = 2^{-20}$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$2^{-29}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les $32$ bits du codage ne sont pas tous des chiffres<br/>
de la mantisse. Seuls les $23$ bits de mantisse fixent la<br/>
précision : l'écart vaut $2^{3 - 23} = 2^{-20}$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q33 : Trois fois un dixième</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut <code>0.1 * 3 == 0.3</code> en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Tester l'égalité de deux flottants est presque toujours une erreur.<br/>
On compare plutôt leur écart à une tolérance.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>False</code>, le produit valant <code>0.30000000000000004</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : ni $0{,}1$ ni $0{,}3$ ne sont représentables<br/>
exactement en binaire. Les erreurs ne se compensent pas et le<br/>
produit diffère de <code>0.3</code> au seizième chiffre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>True</code>, le calcul étant exact en décimal comme en binaire</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>0.1</code> est déjà une approximation de $0{,}1$ ; la<br/>
multiplier par $3$ ne redonne pas l'approximation de $0{,}3$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, un flottant ne pouvant être comparé avec <code>==</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la comparaison est permise, elle est seulement peu<br/>
fiable.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>0.3</code>, la valeur commune des deux membres</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une comparaison renvoie un booléen, et les deux membres<br/>
ne sont d'ailleurs pas égaux.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q34 : Une boucle qui ne rencontre jamais un</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que se passe-t-il à l'exécution de ce programme ?<br/>
<pre><code>x = 0
while x != 1:
    x = x + 0.1
print("fini")</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une boucle <code>while</code> sur un flottant doit utiliser <code>&lt;</code> ou <code>&lt;=</code>, jamais<br/>
<code>!=</code> ou <code>==</code> : l'égalité exacte n'est pas atteignable.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>La boucle ne s'arrête jamais, <code>x</code> n'égalant jamais <code>1</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : dix additions de <code>0.1</code> donnent<br/>
<code>0.9999999999999999</code>, puis <code>x</code> dépasse $1$ sans jamais l'égaler.<br/>
La condition reste vraie indéfiniment.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il affiche <code>fini</code> après dix tours, <code>x</code> valant alors exactement <code>1</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : après dix tours, <code>x</code> vaut <code>0.9999999999999999</code>, pas<br/>
<code>1</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il affiche <code>fini</code> après onze tours, <code>x</code> dépassant alors <code>1</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : au onzième tour <code>x</code> vaut environ <code>1.0999999999999999</code>,<br/>
toujours différent de <code>1</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, <code>!=</code> n'acceptant pas un entier et un flottant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la comparaison est valide ; le problème est qu'elle ne<br/>
devient jamais fausse.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q35 : Un entier qui n'est pas celui attendu</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut <code>int((0.1 + 0.7) * 10)</code> en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Tronquer un flottant proche d'un entier est un piège classique :<br/>
<code>round</code> est plus sûr que <code>int</code> quand on attend une valeur entière.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>7</code>, le produit valant <code>7.999999999999999</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>0.1 + 0.7</code> vaut <code>0.7999999999999999</code>, un peu<br/>
moins que $0{,}8$ ; multiplié par $10$, le résultat reste sous<br/>
$8$, et <code>int</code> tronque à $7$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>8</code>, le calcul tombant juste sur un entier</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le calcul tombe juste en décimal, pas en binaire. Le<br/>
résultat est légèrement inférieur à $8$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>8.0</code>, <code>int</code> conservant un flottant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>int</code> renvoie toujours un entier.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, <code>int</code> ne s'appliquant qu'aux chaînes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>int</code> accepte un flottant et le tronque.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q36 : Un affichage plus exact que la valeur stockée</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p><code>0.1</code> n'est pas représentable exactement en binaire, et pourtant<br/>
<code>print(0.1)</code> affiche <code>0.1</code>. Pourquoi ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>L'affichage d'un flottant est une écriture décimale choisie pour<br/>
être courte et sans ambiguïté. Il ne dit rien de l'exactitude de<br/>
la valeur stockée.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Python affiche la plus courte écriture qui redonne le même flottant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la valeur stockée est<br/>
$0{,}1000000000000000055\ldots$, mais <code>0.1</code> suffit à la<br/>
désigner sans ambiguïté, et c'est cette écriture courte qui est<br/>
affichée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que <code>0.1</code> est stocké exactement, contrairement à <code>0.3</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun des deux n'est exact ; $0{,}1$ est une fraction<br/>
dont le dénominateur n'est pas une puissance de $2$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que <code>print</code> arrondit toujours à un chiffre après la virgule</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>print(0.30000000000000004)</code> affiche bien dix-sept<br/>
chiffres ; l'arrondi dépend de ce qui suffit à retrouver la<br/>
valeur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que l'erreur de représentation est corrigée à l'affichage</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : rien n'est corrigé, la valeur stockée reste inexacte ;<br/>
seule son écriture est raccourcie.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q37 : Combien de flottants entre un et deux</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>En double précision, la mantisse compte $52$ bits après la virgule.<br/>
Combien de flottants distincts sont compris entre $1$ inclus et $2$<br/>
exclu ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les flottants forment un ensemble fini et irrégulier : autant de<br/>
valeurs entre $1$ et $2$ qu'entre $1024$ et $2048$, mais bien plus<br/>
espacées dans le second cas.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$2^{52}$, un par mantisse possible</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : entre $1$ et $2$, l'exposant est fixé à $0$ et<br/>
seule la mantisse varie, sur $52$ bits : $2^{52}$ valeurs,<br/>
régulièrement espacées de $2^{-52}$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une infinité, comme pour les réels</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un flottant occupe $64$ bits, donc il n'existe qu'un<br/>
nombre fini de valeurs, et une infinité de réels sont<br/>
inaccessibles.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$2^{64}$, le nombre total de flottants</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $2^{64}$ est le nombre de mots de $64$ bits, répartis<br/>
sur toutes les puissances de deux, pas seulement entre $1$ et<br/>
$2$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$1000$, un par millième entre les deux bornes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le pas des flottants n'est pas décimal ; entre $1$ et<br/>
$2$ il vaut $2^{-52}$, bien plus fin qu'un millième.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q38 : Pas et maximum d'une virgule fixe</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un nombre est codé en virgule fixe sur $8$ bits, dont $4$ pour la<br/>
partie entière et $4$ pour la partie fractionnaire. Quel est<br/>
l'écart entre deux valeurs consécutives, et quelle est la plus<br/>
grande valeur codable ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>En virgule fixe, le nombre de bits fractionnaires fixe la<br/>
précision, le nombre de bits entiers fixe la plage. Augmenter l'un<br/>
réduit l'autre : c'est la limite que lève la virgule flottante.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Un pas de $0{,}0625$ et un maximum de $15{,}9375$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le dernier bit fractionnaire pèse $2^{-4} =<br/>
0{,}0625$, et le maximum, tous bits à $1$, vaut $2^{4} - 0{,}0625 =<br/>
15{,}9375$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un pas de $0{,}25$ et un maximum de $15{,}9375$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le pas est le poids du bit le plus à droite,<br/>
$2^{-4}$, et non $1/4$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un pas de $0{,}0625$ et un maximum de $16$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $16 = 2^{4}$ n'est pas codable : avec $4$<br/>
bits entiers, le maximum est $2^{4}$ moins un pas.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un pas de $1$ et un maximum de $255$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait un entier non signé sur $8$ bits, sans partie<br/>
fractionnaire.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q39 : Une puissance de dix en Python</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut <code>1e3</code> en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>3.5e-2</code> vaut $0{,}035$ et <code>6e23</code> vaut $6 \times 10^{23}$ : la<br/>
notation scientifique s'écrit avec <code>e</code> et produit un flottant.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>1000.0</code>, un flottant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>1e3</code> signifie $1 \times 10^{3}$ et cette<br/>
notation produit toujours un flottant, même pour une valeur<br/>
entière.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>1000</code>, un entier</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la notation avec <code>e</code> donne un <code>float</code>, pas un <code>int</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>13</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>e</code> ne concatène pas des chiffres, il introduit un<br/>
exposant de $10$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, <code>e</code> n'étant pas un chiffre</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>1e3</code> est une écriture valide, la notation scientifique<br/>
de Python.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q40 : Écrire un test d'égalité avec tolérance</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle expression teste correctement que deux flottants <code>a</code> et <code>b</code><br/>
sont égaux à $10^{-9}$ près ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Comparer des flottants, c'est comparer leur écart à un seuil ;<br/>
la valeur absolue évite le piège du signe.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>abs(a - b) &lt; 1e-9</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la valeur absolue rend le test symétrique, que<br/>
<code>a</code> soit un peu au-dessus ou un peu en dessous de <code>b</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>abs(a) - abs(b) &lt; 1e-9</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce test compare des valeurs absolues ; $-1$ et $1$<br/>
passeraient pour égaux.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>round(a) == round(b)</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : arrondir à l'entier confond $1{,}4$ et $0{,}6$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>a == b</code> ou <code>a - b == 0</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : deux écritures du test exact, qui échoue sur<br/>
$0{,}1 + 0{,}2$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q41 : Calculer des montants sans erreur d'arrondi</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un programme de caisse additionne des prix en euros et des<br/>
centimes. Comment éviter les erreurs d'arrondi des flottants ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Dès qu'un calcul exige l'exactitude, argent, comptage, on choisit<br/>
une unité entière plutôt qu'un flottant.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Compter en centimes avec des entiers, exacts par nature</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : $12{,}30$ € devient $1230$ centimes ; les<br/>
additions d'entiers sont exactes, et l'on ne divise par $100$<br/>
qu'à l'affichage.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Arrondir le total à deux décimales après chaque addition</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : chaque arrondi corrige un peu, mais les erreurs<br/>
peuvent s'accumuler sur des milliers d'opérations.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Utiliser des flottants en double précision, plus précis</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les flottants de Python sont déjà en double précision,<br/>
et $0{,}1$ n'y est pas exact.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Convertir chaque prix en chaîne avant de l'additionner</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on ne peut pas additionner des chaînes.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q42 : Le bit caché de la mantisse</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un flottant normalisé s'écrit $1{,}m \times 2^e$. Que devient le<br/>
$1$ placé avant la virgule dans le codage IEEE 754 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Sous forme normalisée, le chiffre avant la virgule est toujours<br/>
$1$ en binaire : inutile de l'écrire, la norme le sous-entend.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Il n'est pas stocké, étant toujours égal à $1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : seule la partie fractionnaire $m$ occupe les<br/>
bits de mantisse ; le $1$ est sous-entendu, ce qui gagne un bit<br/>
de précision.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il est stocké en tête des bits de mantisse</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le stocker gaspillerait un bit toujours identique.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il vaut $0$ pour les nombres négatifs</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le signe a son propre bit, la mantisse est la même.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il est ajouté à l'exposant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'exposant ne code que la puissance de deux.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Représentation des réels — Q43 : Le bit de signe d'un flottant</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Comment le signe d'un flottant est-il codé en IEEE 754 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Signe, exposant, mantisse : les trois champs d'un flottant, le<br/>
premier ne prenant qu'un bit.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Par un seul bit, $1$ pour un nombre négatif</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le premier bit du codage vaut $0$ pour un<br/>
positif et $1$ pour un négatif ; mantisse et exposant codent la<br/>
valeur absolue.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Par le complément à deux de la mantisse</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le complément à deux concerne les entiers, pas les<br/>
flottants.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Par un seul bit, $1$ pour un nombre positif</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la convention est inverse, $1$ signale un négatif.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Par le signe de l'exposant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'exposant dit si le nombre est grand ou petit, pas<br/>
s'il est négatif.</p>]]></text>
    </feedback>
  </answer>
</question>

</quiz>
