CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Multiplication chez un ordinateur

_Azerty777
_Azerty777
Niveau 10
02 juin 2006 à 19:57:31

:salut:

Voilà, j´savais pas trop où poster ça mais bon, me suis dit que ça avait sa place ici quand même. Bon, la question est donc : comment fait un processeur pour multiplier? Il peut pas mémoriser tous les résultats (beaucoup trop de mémoire, et puis comme on peut faire les nombres qu´on veut...), donc il doit logiquement fonctionner par "addition" (3 * 4 = 3 + 3 + 3 + 3), mais ça paraît bancal pour des trucs genre 7.776 * 0.123, donc non. Donc, la question peut paraître stupide mais : comment qu´il fait? :question:

:merci d´avance. :-)

maniac_de_pc
maniac_de_pc
Niveau 9
02 juin 2006 à 20:10:25

Mais t´es con ou quoi? As-tu vu un certain forum "Sciences et Technologies" pendant ton long voyage vers ce forum? Crois-tu vraiment que ton "truc" est paranormal? Le jour ou tu le prouveras, tu me donneras 10 claques si tu veux...

maniac_de_pc
maniac_de_pc
Niveau 9
02 juin 2006 à 20:13:08

Oups, excuse mille pardons je me croyais dans le forum paranormal qui comme vous la savez grouille de boulets. je suis con ... :desole:

tantale
tantale
Niveau 9
02 juin 2006 à 20:24:40

Ce n´est certainement pas une question stupide.
C´est assez compliqué. En fait avant même de vouloir comprendre comment un programme peut multiplier 2 nombres, il faut déjà savoir comment un ordinateur "représente" les nombres.
Ce qui est en partie expliqué là :
http://www.commentcamarche.net/base/representation.php3

Aldebran
Aldebran
Niveau 10
02 juin 2006 à 20:28:39

Le maître Fvirtman saura nous expliquer ça ! :)
O grand sage, fait déteindre sur nous la connaissance de l´ordinateur :lol:

_Azerty777
_Azerty777
Niveau 10
02 juin 2006 à 21:53:17

maniac_de_pc==>MDR! :lol: Ahlalala tu m´redonnes le sourire d´un coup, dommage que j´aille me coucher dans pas longtemps. :-)

tantale==>Merci beaucoup, très intéressant comme lien. :)

Jarozse
Jarozse
Niveau 10
02 juin 2006 à 22:43:44

En général, il s´agit effectivement de mettre sous forme de sommes de multiplications élémentaires. Après tu as des astuces du style "on s´arrange pour mettre le maximum de multiplication par 2", ou "on s´arrange pour calculer de manière non-redondante les termes de la somme", etc.

Après il faut avoir également des méthodes efficaces pour additionner ^^

Gamebreakers-B-
Gamebreakers-B-
Niveau 10
02 juin 2006 à 22:50:32

Je ne m´y connais pas trop dans ce domaine...

En tout cas, les ordinateurs "comptent" en base 2 (binaire) mais à mon avis, tu dois le savoir...

Au niveau des multiplications, je n´en sais rien du tout...
Est-ce que ça a un rapport avec les portes logiques :question:

le_chacal
le_chacal
Niveau 9
02 juin 2006 à 23:12:04

Je sais précisemment comment se passe une addition, mais je n´ai aucune idée de la facon dont s´opère une multiplication non-naturelle. (c´est à dire avec des 0.123)

Jarozse
Jarozse
Niveau 10
03 juin 2006 à 00:26:29

Heu...ce n´est pas si facile que ça de faire une addition. Au niveau élémentaire, une porte logique suffit effectivement, mais des grosses additions, il faut mieux avoir des techniques, parce que si tu commences à y aller comme un bourrin sur des trucs aussi simple...Il ne faut pas oublier que ce n´est pas juste "on fait +1" mais qu´il faut utiliser des "transistors" (même si ce n´est pas exactement ça) et faire mumuse avec le courant.

le_chacal
le_chacal
Niveau 9
03 juin 2006 à 11:11:28

cf. Sujet d´info chez les CCP cette année.

iunity
iunity
Niveau 5
03 juin 2006 à 17:56:51

A titre d´information, j´ai pris en photo un schéma d´additionneur 4 bits :
http://img380.imageshack.us/img380/6488/cimg04472lv.jpg

Je ne me souviens plus très bien de son fonctionnement donc je vais peut-être dire une bêtise, mais il fonctionne bien avec des additions.

Si on regarde l´addition en binaire en haut à gauche, on peut voir que ça se passe à peu près comme en décimal. On multiplie le premier chiffre de B par A, puis le deuxième chiffre de B par A,... et ensuite on additionne le tout, en décallant le résultat d´un rang à chaque fois.
Or, comme on est en binaire, chaque chiffre vaut soit 0 soit 1. Multiplier un nombre par 0 donne forcément 0, et multiplier un nombre par 1 donne le même nombre.

Voici le truc. Au départ le résultat vaut 0. Ensuite on va prendre un par un les chiffres de B. A chaque fois que le chiffre de B vaut 0, on ne touche pas au résultat. A chaque fois que le chiffre de B vaut 1, on ajoute à droite de A le nombre de 0 qui correspond à la position du chiffre de B testé, puis on ajoute le nombre A décalé au résultat.

Les ordinateurs actuels utilisent sûrement une autre méthode plus rapide, mais ce schéma donne déjà une idée.

Je ne pense pas avoir été très clair, donc si vous avez des questions n´hésitez pas.

_Azerty777
_Azerty777
Niveau 10
03 juin 2006 à 18:29:13

J´ai compris son principe d´addition mais le schéma en lui-même... :/ Déjà, quand tu parles de "porte" je comprends pas, alors... :)

godrik
godrik
Niveau 30
04 juin 2006 à 13:42:17

dans un processeur, les multiplications sur les entiers et sur les rationnel( puisqu´on ne manipule pas de réel dans un processeur) ne se font pas pareil.

les rationnels sont stocké sous la forme x*2^y
x*2^y * x´*2^y´ devient donc: (x*y)*2^(y+y´)

bon vous allez me dire, et comment multiplier des entiers. Si l´on considère un processeur 32 bits, il y a juste a faire 32 additions et décalage de bit. (multiplier par deux, c´est décaler un bit a gauche)

_Azerty777
_Azerty777
Niveau 10
04 juin 2006 à 13:59:26

Euh...pourtant il existe (en C notemment) une fonction "racine" (sqrt si je me rappelle bien), or racine de 2 n´est pas un rationnel, donc...y´a un hic quelque part. :-)

tantale
tantale
Niveau 9
04 juin 2006 à 16:00:12

sqrt(2) renvoie une valeur approchée de racine de 2.

iunity
iunity
Niveau 5
04 juin 2006 à 18:46:07

En fait, un ordinateur peut stocker des réels. Dans la plupart des cas, il est stocké sous la forme :
xyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzz
x représente le signe (1 pour négatif et 0 pour positif). y représente un nombre codé en binaire classique correspondant au nombre sans la virgule et z représente le nombre de zéros à ajouter avant ou après (z peut être négatif).

Par exemple, si on prends le nombre sqrt(2)=1.4142, on aura :
x=0 car le nombre est positif
y=14142
z=-4, car il faut décaler y de 4 rangs vers la gauche

Par contre, je ne me souviens plus du nombre exact de bits y et de bits z.

Il existe un algorithme qui permet de faire sqrt(2) et agissant directement sur les 0 et les 1 du nombre. Je vais esayer de le retrouver, mais c´est pas gagné.

tantale
tantale
Niveau 9
04 juin 2006 à 18:54:14

iunity : Cela permet juste de représenter des nombres qui admettent une écriture finie (et pas trop grande !) dans la base choisie, en tout cas uniquement des rationnels. Or sqrt(2) est irrationnel...

iunity
iunity
Niveau 5
04 juin 2006 à 21:37:45

Effectivement, les nombres ayant trop de décimales seront arrondis. En même temps, je ne suis pas sûr que ce genre de nombre soit codé sur 32 bits, il y en a peut-être plus.

Tous les nombres irrationnels sont arrondis, comme les nombres trop grands. C´est pour ça qu´en C il faut éviter les comparaisons entre des float (voir le tutoriel de JYY à l´adresse
http://perso.numericable.fr/~fvirtman/info/tuto/G_15_testdouble.cpp ).

Fvirtman
Fvirtman
Niveau 10
04 juin 2006 à 23:43:56

Si vous etes intéressé par le fonctionnement de la mémoire et des processeurs, j´avais suivi un cours en licence d´informatique que j´avais retapé. il est sur mon site : (cf ma carte)
rubrique fac / licence info / "technologie des ordinateurs part 1 & 2"

Pour la multiplication des nombres entiers, le schéma donné par iunity est juste :
l´ordi procede comme on apprend a l´école primaire : d´abord, on multiplie les chiffres un par un, puis on additionne le tout avec des nombres décalés.
Pour multiplier des chiffres binaires (car c´est ce que fait l´ordi), on utilise un ET logique, symbolisé par & sur le schéma : en binaire, pas de retenue pour une multiplication.
Sinon, pour les additionneurs, ça marche également comme on apprend a l´école (cf le cours sur mon site qui parle d´additionneurs)

Les flottants sont codés comme le dit iunity.
Les parties dont il parle s´appellent signe, mantisse (la partie qu´il appelle y), et exposant.
Sur le site suivant le nombre de bits alloués en fonction du type (float, double)

http://www.officieldunet.com/index.php?pid=327

Pour la multiplication des flottants, je ne suis pas experts, je ne pourrai pas répondre dans le détail... mais si quelqu´un a un bon site ! pareil pour le calcul des racines carrées

par contre, il me semble que les racines carrés sont beaucoup plus longues a calculer que le reste. Ainsi, pour les programmeurs, je vous invite a éviter les racines carrés tant que vous pouvez, surtout dans les zones ou la vitesse est critique.

Une astuce connue pour multiplier par 2 est de décaler tous les bits a droite. Pour diviser par 2, décalez tous les bits a gauche

(c´est pareil dans notre systeme de base 10 : pour multiplier par 10, vous décalez tout a droite (en ajoutant a 0 a la case nouvellement créée))

Sous forums
  • Astronomie
La vidéo du moment