SlideShare ist ein Scribd-Unternehmen logo
1 von 3
Pour se soustraire à la soustraction

       Les mystères de la représentation des nombres négatifs expliqués !

                                    Jeudi 23 septembre 2010

                        Blog « Plexus Logos Calx » de Jean Rohmer




Dans les ordinateurs, il y a des circuits qui servent additionner deux nombres, mais il n'y en a pas qui
servent à les soustraire. Pourquoi ? Parce que l'on a trouvé un moyen de faire des soustractions avec
des additions!. L'avantage est que cela diminue la complexité de la machine, donc sa taille, donc son
coût.

Techniquement le tour de passe-passe s'appelle "la représentation en complément à deux".

Mais ça n'est pas très facile à comprendre. Nous allons voir plus loin comment découvrir et
comprendre la chose.

Faisons d'abord quelques rappels de représentation binaire des nombres.

Considérons une machine avec des mots de 4 bits.

On peut utiliser ces 4 bits pour représenter les entiers naturels de 0 à 15:

0000 = 0    0001 = 1    0010 = 2    0011 = 3

0100 = 4    0101 = 5    0110 = 6    0111 = 7

1000 = 8    1001 = 9    1010 = 10 1011 = 11

1100 = 12 1101 = 13 1110 = 14 1111 = 15

Maintenant, si l'on veut représenter des nombres positifs ou nuls et des nombres négatifs sur ces 4
bits, on vous dira que ça donne ça:

0000 = 0     0001 = 1    0010 = 2     0011 = 3

0100 = 4     0101 = 5    0110 = 6     0111 = 7

1000 = -8   1001 = -7    1010 = -6 1011 = -5

1100 = -4   1101 = -3    1110 = -2 1111 = -1



Ce qui est magique, c'est que pour faire 7 – 5, on ne va pas faire de soustraction mais additionner le
nombre 7 et le nombre -5:
0111 (7)

     +1011 (-5)



Et pour ça on fait comme l'addition que l'on apprend à l'école primaire en décimal, avec une retenue,
et comme table d'addition

0+0=0

0+1=1

1+0=1

1 + 1 = 0 avec une retenue de 1

      1110 <----- retenue

      0111

     +1011

----------------------

     10010

Dans ce calcul, le résultat tient sur 5 bits, mais dans les mots de la machine il n'y en a que 4, donc le
résultat est 0010, soit 2 en décimal, ce qui est très satisfaisant!

La question est donc de savoir comment, quand on veut soustraire 5 (0101) on passe à -5 (1011).

Pour y répondre, pensez à votre compte en banque.

Si vous n'êtes pas très riche, vous avez pris l'habitude de ne regarder que les 4 derniers chiffres :-)

Si votre compte est à 3527 euros, et que vous retirez 2000 euros, il vous reste 1527 euros

Mais si par miracle -ou par erreur- vous recevez un virement de 8000 euros, si vous continuez à
regarder les 4 derniers chiffres, vous trouvez aussi 1527 euros!

Si votre compte est à 3527 euros, et que vous retirez 2215 euros, il vous reste 1312 euros

Mais si par miracle -ou par erreur- vous recevez un virement de 7785 euros, si vous continuez à
regarder les 4 derniers chiffres, vous trouvez aussi 1312 euros!



Autrement dit, à vos yeux pessimistes:

-- ajouter 8000 euros, c'est la même chose qu'en soustraire 2000
-- ajouter 7785 euros, c'est la même chose qu'en soustraire 2215

Pour économiser la soustraction -il n'y a pas de petites économies-, il suffit donc de savoir passer de:

-2000 à + 8000

-2215 à + 7785

Comment ça se passe ?

Ne répondez pas "il suffit de retrancher le nombre de départ à 10000", puisque justement l'on
s'interdit la soustraction!

Il faut trouver un moyen qui ne fait pas intervenir la soustraction.

Prenez d'autres exemples de couples comme 2215 et 7785 et vous allez vite vous apercevoir que:

Le second nombre se déduit du premier en remplaçant chaque chiffre par son complément à 9, sauf
pour le premier, où on prend son complément à 10:

2 --> 7

1 --> 8

5 --> 5

Ce qui est équivalent à dire:

-- on remplace chaque chiffre par son complément à 9

-- on ajoute 1 au résultat

Finalement, on s'est bien débarrassé de la soustraction en la remplaçant par un complément à 9 de
chaque chiffre et une addition de 1. C'est gagné!

En décimal, le 9 est le plus grand des chiffres de 0 à 9

En binaire, le rôle du 9 est remplacé par le plus grand chiffre de 0 à 1, soit 1.

Il faut donc prendre le complément à 1 de chaque bit, ce qui revient à l'inverser:

0 --> 1

1 --> 0

Et comme

•l'inversion d'un bit est la plus simple des opérations réalisables avec des portes logiques

•ajouter 1 à un nombre est "gratuit" car tout additionneur comporte une entrée "retenue", qu'il
suffit de mettre à 1 pour ajouter 1

On est très content: faire une soustraction avec un additionneur ne va pas nous coûter bien cher.

Weitere ähnliche Inhalte

Mehr von Jean Rohmer

Arithmetics with symbolic Artificial Intelligence and Prolog: it's a child's...
Arithmetics with symbolic Artificial Intelligence  and Prolog: it's a child's...Arithmetics with symbolic Artificial Intelligence  and Prolog: it's a child's...
Arithmetics with symbolic Artificial Intelligence and Prolog: it's a child's...Jean Rohmer
 
Semantic architectures for Artificial Intelligence
Semantic architectures for Artificial IntelligenceSemantic architectures for Artificial Intelligence
Semantic architectures for Artificial IntelligenceJean Rohmer
 
L'informatique n'est pas l'amie des données
L'informatique n'est pas l'amie des donnéesL'informatique n'est pas l'amie des données
L'informatique n'est pas l'amie des donnéesJean Rohmer
 
Construire un moteur d'inférence
Construire un moteur d'inférenceConstruire un moteur d'inférence
Construire un moteur d'inférenceJean Rohmer
 
Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!
Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!
Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!Jean Rohmer
 
Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...
Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...
Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...Jean Rohmer
 
Artificial Intelligence Past Present and Future
Artificial Intelligence Past Present and FutureArtificial Intelligence Past Present and Future
Artificial Intelligence Past Present and FutureJean Rohmer
 
Knowledge representation: structured or unstructured?
Knowledge representation: structured or unstructured?Knowledge representation: structured or unstructured?
Knowledge representation: structured or unstructured?Jean Rohmer
 
Semantic networks, business rules, inference engines, and complex event proc...
Semantic networks, business rules, inference engines,  and complex event proc...Semantic networks, business rules, inference engines,  and complex event proc...
Semantic networks, business rules, inference engines, and complex event proc...Jean Rohmer
 
De l'IA au Calcul Littéraire: Pourquoi j'ai zappé le Web Sémantique
De l'IA au Calcul Littéraire: Pourquoi j'ai zappé le Web Sémantique De l'IA au Calcul Littéraire: Pourquoi j'ai zappé le Web Sémantique
De l'IA au Calcul Littéraire: Pourquoi j'ai zappé le Web Sémantique Jean Rohmer
 
Ideliance semantic network 2000
Ideliance semantic network 2000Ideliance semantic network 2000
Ideliance semantic network 2000Jean Rohmer
 
Standards considered harrmful
Standards considered harrmfulStandards considered harrmful
Standards considered harrmfulJean Rohmer
 
Litteratus calculus fundamentals
Litteratus calculus fundamentalsLitteratus calculus fundamentals
Litteratus calculus fundamentalsJean Rohmer
 
Internet in 2020 rohmer open world forum 2011
Internet in 2020 rohmer open world forum 2011Internet in 2020 rohmer open world forum 2011
Internet in 2020 rohmer open world forum 2011Jean Rohmer
 

Mehr von Jean Rohmer (14)

Arithmetics with symbolic Artificial Intelligence and Prolog: it's a child's...
Arithmetics with symbolic Artificial Intelligence  and Prolog: it's a child's...Arithmetics with symbolic Artificial Intelligence  and Prolog: it's a child's...
Arithmetics with symbolic Artificial Intelligence and Prolog: it's a child's...
 
Semantic architectures for Artificial Intelligence
Semantic architectures for Artificial IntelligenceSemantic architectures for Artificial Intelligence
Semantic architectures for Artificial Intelligence
 
L'informatique n'est pas l'amie des données
L'informatique n'est pas l'amie des donnéesL'informatique n'est pas l'amie des données
L'informatique n'est pas l'amie des données
 
Construire un moteur d'inférence
Construire un moteur d'inférenceConstruire un moteur d'inférence
Construire un moteur d'inférence
 
Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!
Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!
Expériences de gestion des connaissances avec IDELIANCE: supprimons le document!
 
Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...
Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...
Intelligence Artificielle: résolution de problèmes en Prolog ou Prolog pour l...
 
Artificial Intelligence Past Present and Future
Artificial Intelligence Past Present and FutureArtificial Intelligence Past Present and Future
Artificial Intelligence Past Present and Future
 
Knowledge representation: structured or unstructured?
Knowledge representation: structured or unstructured?Knowledge representation: structured or unstructured?
Knowledge representation: structured or unstructured?
 
Semantic networks, business rules, inference engines, and complex event proc...
Semantic networks, business rules, inference engines,  and complex event proc...Semantic networks, business rules, inference engines,  and complex event proc...
Semantic networks, business rules, inference engines, and complex event proc...
 
De l'IA au Calcul Littéraire: Pourquoi j'ai zappé le Web Sémantique
De l'IA au Calcul Littéraire: Pourquoi j'ai zappé le Web Sémantique De l'IA au Calcul Littéraire: Pourquoi j'ai zappé le Web Sémantique
De l'IA au Calcul Littéraire: Pourquoi j'ai zappé le Web Sémantique
 
Ideliance semantic network 2000
Ideliance semantic network 2000Ideliance semantic network 2000
Ideliance semantic network 2000
 
Standards considered harrmful
Standards considered harrmfulStandards considered harrmful
Standards considered harrmful
 
Litteratus calculus fundamentals
Litteratus calculus fundamentalsLitteratus calculus fundamentals
Litteratus calculus fundamentals
 
Internet in 2020 rohmer open world forum 2011
Internet in 2020 rohmer open world forum 2011Internet in 2020 rohmer open world forum 2011
Internet in 2020 rohmer open world forum 2011
 

Les mystères des nombres en complément à deux révélés

  • 1. Pour se soustraire à la soustraction Les mystères de la représentation des nombres négatifs expliqués ! Jeudi 23 septembre 2010 Blog « Plexus Logos Calx » de Jean Rohmer Dans les ordinateurs, il y a des circuits qui servent additionner deux nombres, mais il n'y en a pas qui servent à les soustraire. Pourquoi ? Parce que l'on a trouvé un moyen de faire des soustractions avec des additions!. L'avantage est que cela diminue la complexité de la machine, donc sa taille, donc son coût. Techniquement le tour de passe-passe s'appelle "la représentation en complément à deux". Mais ça n'est pas très facile à comprendre. Nous allons voir plus loin comment découvrir et comprendre la chose. Faisons d'abord quelques rappels de représentation binaire des nombres. Considérons une machine avec des mots de 4 bits. On peut utiliser ces 4 bits pour représenter les entiers naturels de 0 à 15: 0000 = 0 0001 = 1 0010 = 2 0011 = 3 0100 = 4 0101 = 5 0110 = 6 0111 = 7 1000 = 8 1001 = 9 1010 = 10 1011 = 11 1100 = 12 1101 = 13 1110 = 14 1111 = 15 Maintenant, si l'on veut représenter des nombres positifs ou nuls et des nombres négatifs sur ces 4 bits, on vous dira que ça donne ça: 0000 = 0 0001 = 1 0010 = 2 0011 = 3 0100 = 4 0101 = 5 0110 = 6 0111 = 7 1000 = -8 1001 = -7 1010 = -6 1011 = -5 1100 = -4 1101 = -3 1110 = -2 1111 = -1 Ce qui est magique, c'est que pour faire 7 – 5, on ne va pas faire de soustraction mais additionner le nombre 7 et le nombre -5:
  • 2. 0111 (7) +1011 (-5) Et pour ça on fait comme l'addition que l'on apprend à l'école primaire en décimal, avec une retenue, et comme table d'addition 0+0=0 0+1=1 1+0=1 1 + 1 = 0 avec une retenue de 1 1110 <----- retenue 0111 +1011 ---------------------- 10010 Dans ce calcul, le résultat tient sur 5 bits, mais dans les mots de la machine il n'y en a que 4, donc le résultat est 0010, soit 2 en décimal, ce qui est très satisfaisant! La question est donc de savoir comment, quand on veut soustraire 5 (0101) on passe à -5 (1011). Pour y répondre, pensez à votre compte en banque. Si vous n'êtes pas très riche, vous avez pris l'habitude de ne regarder que les 4 derniers chiffres :-) Si votre compte est à 3527 euros, et que vous retirez 2000 euros, il vous reste 1527 euros Mais si par miracle -ou par erreur- vous recevez un virement de 8000 euros, si vous continuez à regarder les 4 derniers chiffres, vous trouvez aussi 1527 euros! Si votre compte est à 3527 euros, et que vous retirez 2215 euros, il vous reste 1312 euros Mais si par miracle -ou par erreur- vous recevez un virement de 7785 euros, si vous continuez à regarder les 4 derniers chiffres, vous trouvez aussi 1312 euros! Autrement dit, à vos yeux pessimistes: -- ajouter 8000 euros, c'est la même chose qu'en soustraire 2000
  • 3. -- ajouter 7785 euros, c'est la même chose qu'en soustraire 2215 Pour économiser la soustraction -il n'y a pas de petites économies-, il suffit donc de savoir passer de: -2000 à + 8000 -2215 à + 7785 Comment ça se passe ? Ne répondez pas "il suffit de retrancher le nombre de départ à 10000", puisque justement l'on s'interdit la soustraction! Il faut trouver un moyen qui ne fait pas intervenir la soustraction. Prenez d'autres exemples de couples comme 2215 et 7785 et vous allez vite vous apercevoir que: Le second nombre se déduit du premier en remplaçant chaque chiffre par son complément à 9, sauf pour le premier, où on prend son complément à 10: 2 --> 7 1 --> 8 5 --> 5 Ce qui est équivalent à dire: -- on remplace chaque chiffre par son complément à 9 -- on ajoute 1 au résultat Finalement, on s'est bien débarrassé de la soustraction en la remplaçant par un complément à 9 de chaque chiffre et une addition de 1. C'est gagné! En décimal, le 9 est le plus grand des chiffres de 0 à 9 En binaire, le rôle du 9 est remplacé par le plus grand chiffre de 0 à 1, soit 1. Il faut donc prendre le complément à 1 de chaque bit, ce qui revient à l'inverser: 0 --> 1 1 --> 0 Et comme •l'inversion d'un bit est la plus simple des opérations réalisables avec des portes logiques •ajouter 1 à un nombre est "gratuit" car tout additionneur comporte une entrée "retenue", qu'il suffit de mettre à 1 pour ajouter 1 On est très content: faire une soustraction avec un additionneur ne va pas nous coûter bien cher.