Un peu de maths ?
Jeudi 26 juillet 2012
Tiens, marrante cette image, trouvée via le blog de Nono :
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.
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.
Le Hollandais Volant
TD : #
Merci, j'apprends que l'ordre d'écriture a une importance.
Wosk : #
En fait c'est voulu (et décrit dans le manuel pour ma TI-89) : cela permet de simplifié l'écriture lors de division ;)
®om : #
s/42/48/
Le Hollandais Volant : #
@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…)
pasta : #
J'ai la même calculatrice et je viens de tester et en effet ça donne 2 donc j'ai lu la doc et ils disent ça : http://img4.hostingpics.net/pics/285280Capture1.png
Sauf que quand je teste avec la calculatrice ça donne pas le même résultat: effectivement il y a un bug
Julien et Nel : #
Le moyen le plus pratique de compter, ça reste sur ses mains :p
okh : #
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
Le Hollandais Volant : #
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^^"…).
Pascal C.Plusplus : #
J'ai testé avec la console python, et ça marche (version 2.7.3)
pasta : #
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 ....)
qwerty : #
comment tester un code : la priorité mathématique !
Le Hollandais Volant : #
@Pascal C.Plusplus : même version. Je ne met pas le « * » devant la parenthèse moi, et c’est ça qui plante.
@pasta : ah, souvenirs ça \o/ … :(
GoustiFruit : #
@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.
Wosk : #
@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.
adren : #
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à...)
RGB : #
gcalctool sous linux donne 288.
J'utilisais une HP48 en polonaise inverse et là pas de problème non plus
RGB : #
gcalctool sous linux donne 288.
J'utilisais une HP48 en polonaise inverse et là pas de problème non plus
Nono : #
@[Le Hollandais Volant] : Bon, j'avais dit en commentaire, mais ca va pour cette fois, tu as la bonne réponse :)
Le Hollandais Volant : #
@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^^"
Nono : #
@Le Hollandais Volant : je parlais de mon post :p
Mais, c’était plus de taquin-age qu'autre chose :)
jzkhaz : #
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...
cosmotron : #
+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
Le Hollandais Volant : #
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…
Cosmotron : #
@ 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)
HLFH : #
Désolé mais le site http://lehollandaisvolant.net/ va passer dans mon fichier /etc/hosts
+42 pour Goustifruit
(>'_'>) : #
@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!
HLFH : #
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 ;)
HLFH : #
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.
HLFH : #
C'est dommage qu'on ne puisse pas éditer nos commentaires. Comprenez ici 48:2x(9+3) par 48 : 2 x (9+3)
Le Hollandais Volant : #
@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...
erf : #
-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;
}
Harès : #
celle que j aime beaucoup est: 2+2*2=?
La plupart sont incapables de donner le bon résultat de premier coup ;-)
course maquillage : #
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" :/
Le Hollandais Volant : #
@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à...
erf : #
-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.
Petitkoalak : #
@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
Sir.chamallow : #
Hors-Sujet; je déteste les watermarks de 9GAG
blackm man mg : #
l'ordre de priorité est intéressant
erf : #
@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.
madden nfl 13 : #
Tous ces chiffres me donnent mal à la tête alors qu'avec nos amies les parenthèses on en serait pas là lol
Papa Pingouin : #
"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).
louiz’ : #
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 = 2147483648Et 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