Tiens, marrante cette image, trouvée via le blog de Nono :

troll math

Alors, la réponse : 2 ? ou 288 ?

Même la calculatrice s’y méprendrait méprend.
  • Selon la calculatrice de mon ordinateur : 288.
  • Selon ma Casio fx-92 collège : 2.
  • Selon la calculatrice de la console Python :
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'int' object is not callable

En fait, la réponse est bien 288.

C’est une question de priorités opératoires, niveau 5e :
Premièrement, on fait les opérations dans les parenthèses : (9+3) = 12.
Ensuite, on fait les multiplications/divisions dans l’ordre d’écriture : 48÷2×12 = 24×12 = 288.

C’est marrant de voir la calculatrice collège se tromper à ce niveau-là. Que je sache, aucune règle ne dicte les priorités opératoires devant une parenthèse. À l’intérieur, oui. Mais pas devant.
L’absence de « × » devant une parenthèse n’est qu’un confort d’écriture. L’opération de la multiplication est toujours là implicitement, comme une multiplication ordinaire.

D’ailleurs, sur ma calculatrice collège :
48 ÷ 2 (9+3) = 2
48 ÷ 2 × (9+3) = 288

Ceci est manifestement une erreur dans le programme de la calculatrice (ce qui n’est pas possible dans la console python, qui oblige — à juste titre — la présence du « × »).

Et n’oubliez pas : il est très facile de tromper un ordinateur, parce qu’il compte en binaire et non en décimal comme nous, mais aussi parce qu’il est très con.

42 commentaires

gravatar
TD a dit :

Merci, j'apprends que l'ordre d'écriture a une importance.

gravatar
Wosk a dit :

En fait c'est voulu (et décrit dans le manuel pour ma TI-89) : cela permet de simplifié l'écriture lors de division ;)

gravatar
Le Hollandais Volant a dit :

@Wosk : ah mais c’est vachement casse gueule alors :-o.
Finalement j’ai bien fait de ne jamais faire confiance à ma calculatrice, et de toujours mettre des parenthèses partout.
Genre, là j’aurais mit ça : 48 ÷ (2 (9+3)) si j’avais voulu faire la division.


@®om : tutafeh ! C’est corrigé (nombre geek quand tu nous tiens…)

gravatar
okh a dit :

C'est pas un réel bug.
C'est la notation qui est bidon en fait. Vous aurez remarqué qu'a partir de la 3ème, on n'utilise plus le symbole / ou ÷ mais plutot la notation qui consiste a mettre le dénominateur et le nominateur sur deux lignes différentes, qui montre mieux la différence entre 3/2*4 et 3/(2*4).
D'ailleurs aux US, pour apprendre aux enfants les priorités des opérations, on donne l’abréviation PEMDAS pour Parenthèses, Exposants, Multiplications, Divisions, Addition, Soustraction, qui pourrait d'aire croire que la multiplication est prioritaire face a la division alors que c'est au même niveau.

Au final, ca dépends surtout du problème derrière pour savoir comment placer la division :p

gravatar
Le Hollandais Volant a dit :


on donne l’abréviation PEMDAS pour Parenthèses, Exposants, Multiplications, Divisions, Addition, Soustraction, qui pourrait d'aire croire que la multiplication est prioritaire face a la division alors que c'est au même niveau.



Dans ce cas, on peut retenir « PEMA » : la division n’étant qu’une multiplication par l’inverse, et la soustraction l’addition d’un nombre négatif.

(bon après, l’exposant n’est aussi qu’une suite de multiplication et la multiplication une suite d’additions^^"…).

gravatar
Pascal C.Plusplus a dit :

J'ai testé avec la console python, et ça marche (version 2.7.3)

gravatar
pasta a dit :


(bon après, l’exposant n’est aussi qu’une suite de multiplication et la multiplication une suite d’additions^^"…).


non l'exposant c'est exp(a ln(b)) :)
et la multiplication ne peut pas être toujours être équivalente à une suite d'additions, comment multiplié par 1/3 avec des additions? :D
(la loi + est une loi de composition interne et la loi x ....)

gravatar
qwerty a dit :

comment tester un code : la priorité mathématique !

gravatar
GoustiFruit a dit :

@okh : Tout à fait d'accord, pour moi le fait de ne pas mettre le multiplicateur après le deux implique que la notation "2(9+3)" est équivalente à "(2x(9+3))" donc réponse "2" pour moi.

gravatar
Wosk a dit :

@Le Hollandais Volant : D'autant plus que je l'ai appris en exa (heuresemement la TI-89 à un mode d'affichage sans ambiguité). Depuis je vérifie toujours :) .


@okh : Exactement ça : c'est une convention pour la traduction en "vrai" écriture. Le signe ÷ est une plaie.

gravatar
adren a dit :

L'excellente (et surtout hyper complète) calculatrice sous Linux Qalculate donne aussi les mêmes résultats que ta Casio (et pourtant je n'ai pas eu à me plaindre jusque là...)

gravatar
RGB a dit :

gcalctool sous linux donne 288.

J'utilisais une HP48 en polonaise inverse et là pas de problème non plus

gravatar
RGB a dit :

gcalctool sous linux donne 288.

J'utilisais une HP48 en polonaise inverse et là pas de problème non plus

gravatar
Nono a dit :

@[Le Hollandais Volant] : Bon, j'avais dit en commentaire, mais ca va pour cette fois, tu as la bonne réponse :)

gravatar
Le Hollandais Volant a dit :

@Nono : Sur 9gag j’ai pas la liste des commentaires :/
Autrement c’est plus sur l’erreur de la calculatrice que je voulais revenir :p

La prochaine fois je laisserais du temps^^"

gravatar
jzkhaz a dit :

TI-89 la calculette des bonhomme !

Testé éprouvé et validé.
En plus la programmation sur ti 89 c'est mieux.
ASM, TI basic, C compilé en ASM enfin du lourd

J'ose pas vous dire tous ce que l'on a pu mettre dessus pour le bac ;o

Faudrait que je regarde si ils ont pas re sortie la voyager-2000 ;o

Un pote s'est ramené avec au bac les mecs ils comprennez pas ;o
Enfin vivement qu'il sort des écrans mieux que leurs fichu ~200 pixel gris...

gravatar
cosmotron a dit :

+1 pour Goustifruit

2(9+3) est une factorisation et non une multiplication.
Pour simplifier, 2(9+3)=(2*9+2*3)=(2*(9+3))
48/2(9+3)=48/(2*9+2*3)=48/24=2
Pour trouver 288 il eût fallu écrire l'opération 48/2*(9+3)

Pour ceux qui n'arrive pas à comprendre, remplacer 9+3 par la lettre a pour vous simplifier la tâche.
Donc vous avez 48/2a, c.a.d 48 divisé par 2a, 48 divisé par 24, résultat 2

Si vous aviez eu 48/2*a, c.a.d 48 divisé par 2 multiplié par a, cela ferait 24a, résultat 288

CQFD

ps: le facteur a la priorité
Merci la Poste :p

gravatar
Le Hollandais Volant a dit :

2(9+3) = 2×(9+3)
T’es sûr qu’il y a une différence entre la factorisation et le multiplication (en valeur et priorité opératoires ?) ?

Perso j’ai toujours appris que 2y était l’équivalent de 2×y, et qu’on laissait juste de côté le signe de la multiplication pour alléger l’écriture.

Donc si je met ça : 2×y(a+b), tu ferais 2×(y×(a+b)) au lieu de ((2×y)×(a+b)) ? (bien que le résultat soit le même dans mon exemple).
Perso, en cas de doutes, je suis très con et je fais dans le sens de lecture, m’en tenant qu’aux parenthèses et priorités opératoires « réelles » (je ne connaissais pas celle de la factorisation, on l’a jamais vu).

Après, si tu me dis qu’elle existe, ok. Mais il manque quand même une paire de parenthèses sur le dessin initial…

gravatar
Cosmotron a dit :

@ Le Hollandais Volant
En effet, la valeur de 2y est bien de 2*y. 2y peut être remplacé par (2*y) dans tous les cas, et par 2*y que dans les cas où l'absence de parenthèse n'affecte pas l'expression 2y
ex:
2y+3=2*y+3
Mais 90/2y est différent de 90/2*y
Pour 2*y(a+b), cela équivaut systématiquement à 2*(y*(a+b)).
Pour 2y(a+b), cela équivaut systématiquement en notation à (2*y*(a+b)).
2y(a+b) aura systématiquement pour valeur 2*y(a+b) mais 2*y(a+b) n'aura pas systématiquement pour valeur 2y(a+b)

La factorisation est une expression, il faut la considérer comme un bloc entier (d'où les parenthèses que je rajoute)

gravatar
(>'_'>) a dit :

@Cosmotron : Si je ne m'abuse, il me semble que la barre d'une fraction joue justement le rôle d'une parenthèse. Ce petit point a de l'importance, car cela signifie que 90/2y = 90÷(2y) = 90÷(2*y).

Je crois donc plutôt que a*b = ab en tout temps. D'ailleurs, il me semble que la factorisation d'une expression est justement l'écriture de cette expression en une ou plusieurs multiplication!

gravatar
HLFH a dit :

T'as raison LeHollandaisVolant : erreur sur ma calculatrice Casio Graph 100+, soit 2, soit 288. Etonnant. J'ai même dû réinitialiser ma calculatrice. Elle me signalait "erreur de données". Et d'ailleurs, elle le refait. ;) Elle est softbrické !

Tout est expliqué ici : http://fr.wikipedia.org/wiki/Ordre_des_op%C3%A9rations

Finalement, c'était un vrai problème ;)


Une telle convention n'est pas aussi explicite pour des mélanges de divisions et de multiplications. Les calculs de
(a:b).c
et de
a:(b.c)
ne donnent pas le même résultat. L'idée de considérer l'expression a:b.c comme (a:b).c n'est pas encore universellement reconnue. Ainsi certaines calculatrices1 continuent à effectuer le calcul de
a:bc comme a/(bc)
à la place de
a:b*c comme (a:b)*c.
L'écriture sous forme fractionnaire, présentant un délimitant fractionnaire, évite toute ambiguïté de ce genre et limite l'usage de la parenthèse :
(a:b).c s'écrit alors,
et l'écriture a:(bc),

gravatar
HLFH a dit :

En fin de compte, voilà ce que je dirais :

Dans ce calcul 48: 2(9+3), je le vois comme 48: (2(9+3)) donc avec un résultat de 2.

En revanche, je vois 48:2x(9+3) comme une faute conventionnelle. En Mathématiques, dans un produit complexe avec des parenthèses, on évite d'utiliser le x, cela évite des "exceptions au standard" ou des "erreurs d'interprétation"... Bref 2x(9+3) doit s'écrire par convention 2(9+3). En général, cette convention peut s'apprendre en classe de 3ème.

gravatar
HLFH a dit :

C'est dommage qu'on ne puisse pas éditer nos commentaires. Comprenez ici 48:2x(9+3) par 48 : 2 x (9+3)

gravatar
Le Hollandais Volant a dit :

@HLFH : okok, je suis d'accord avec wiki : pour eviter toute ambiguïté, il faut utiliser les parenthèses ou l'écriture fractionnaire.

Après dans ce cas j'apprends moi aussi quelque chose, la priorité devant les parenthèses pour une écriture non fractionnaire...

gravatar
erf a dit :

-2147483648 x -1 = -2147483648 ?


bin ouais:


#include <stdio.h>

int main()
{
int nombre2 = -1;

int nombre1 = 1;

for(;nombre1>0;nombre1++);

printf("%d x %d = %d\n",nombre1,nombre2, nombre1 * nombre2); // O_o

return 0;
}

gravatar
Harès a dit :

celle que j aime beaucoup est: 2+2*2=?
La plupart sont incapables de donner le bon résultat de premier coup ;-)

gravatar
course maquillage a dit :

Avec des parenthèses, c'est vrai qu'il n'y a plus de problème, moi je suis tombée comme une idiote dans le panneau de la réponse "2" :/

gravatar
Le Hollandais Volant a dit :

@erf : connue celle là :D
Et aussi une autre, mais sans ordi : 1+2+4+8+16+... = -1
Elle est évidemment totalement fausse comme démo, mais elle fait intervenir la limite du raisonnement humain en +infini.


@Harès : heu, ben 6 non ?
Et combien de fois ne voit-on pas non plus ça 3+2 = 6, qu'on confond avec 3*2... Mon prof m'avait descendu une fois à cause ça... Mais j'étais pas le seul à avoir lu trop vite cette fois là...

gravatar
erf a dit :

-2147483648 x -1 = 4195548

bin ouais:


#include <stdio.h>

int main()
{

float nombre2 = -1;

int nombre1 = 1;

for(;nombre1>0;nombre1++);

printf("%d x %d = %d\n",nombre1, (int)nombre2, nombre1 * nombre2);// WTF ?

return 0;
}

Attends deux secondes:

-2147483648 x N = 4195548 ?



#include <stdio.h>

//compilation sans option de debug.
int main()//executer plusieurs fois le programme...
{

float nombre2 = -1;

int nombre1 = 1;

for(;nombre1>0;nombre1++);

printf("%d x %d = %d\n",nombre1,nombre2, nombre1 * nombre2);// bobo à la tête.

return 0;
}

CQFD: Les maths ça marchent pas.

gravatar
Petitkoalak a dit :

@Le Hollandais Volant :
comme 5^2 = 10 et 3*5 = 8, deux erreurs qui m'ont fait manquer une très bonne note en 3ème ^^

J'étais un adepte de lecture trop rapide et de la non-relecture, du ocup les seuls fautes qui apparaissent étaient celles d'inattention xD

gravatar
blackm man mg a dit :

l'ordre de priorité est intéressant

gravatar
erf a dit :


@erf : connue celle là :D
Et aussi une autre, mais sans ordi : 1+2+4+8+16+... = -1
Elle est évidemment totalement fausse comme démo, mais elle fait intervenir la limite du raisonnement humain en +infini.



@Hollandais Volant: Je trouve 1, comment tu trouves -1 ?

Démo:

1+2+4+8+16...= infini

Je mets un facteur zero à chaque membre de l'équation.

0(1+2+4+8+16+...)=0(infini)

je simplifie le membre droit:

0(1+2+4+8+16+...)=0

Je fais passer le facteur 0 du membre gauche au membre droit.Une multiplication au membre gauche devient alors une division au membre droit. Le membre droit possède le même numérateur et dénominateur, donc son quotient est de 1.

1+2+4+8+16+...=1

CQFD.

De toute évidence, ta calculatrice a été programmé par un epitechien malgré lui. Les pauvres, ils se coltinent une calculatrice en C le premier mois.

gravatar
madden nfl 13 a dit :

Tous ces chiffres me donnent mal à la tête alors qu'avec nos amies les parenthèses on en serait pas là lol

gravatar
Papa Pingouin a dit :

"Et n’oubliez pas : il est très facile de tromper un ordinateur, parce qu’il compte en binaire et non en décimal comme nous, mais aussi parce qu’il est très con."
Par contre, il est con comme nous. C'est sûr x).

gravatar
louiz’ a dit :


-2147483648 x -1 = 4195548



C’est juste que -2147483648 × -1 ça fait 2147483648, ce qui ne tient pas dans un int (les limite de cet entier en C sont -2147483648 -> 2147483647). Donc si t’essayes de stocker 2147483648 dans un int, il overflow et passe dans les négatifs (comme tu le fais d’ailleurs dans ta boucle for() plutôt inutile), à la valeur -2147483648


Il suffit d’utiliser un type qui permet de stocker des nombres plus grands (http://en.wikipedia.org/wiki/C_data_types) comme ceci, et ça fonctionne :

#include <stdio.h>
int main(void)
{
const long long int a = -2147483648;
printf("%ld * %ld = %ld\n", a, -1L, a*-1L);
}

Ce qui donne

-2147483648 * -1 = 2147483648

Et chose géniale, ça marche même avec -99999999999999999 du coup.

Pour ce qui est de erf, tes problèmes viennent du fait que pour afficher un float avec printf c’est %f et pas %d. De plus vouloir des résultats exacts, précis et déterministes avec un float est impossible, ce n’est pas fait pour et cela dépend du matériel et plein d’autres paramètres qu’un développeur ne peut pas maîtriser ni même prendre en compte. Plus de détails : http://www.parashift.com/c++-faq-lite/floating-pt-errs.html

Les commentaires sont fermés pour cet article