Le calcul qui divise : 6÷2(1+2)

Forum de discussion général. Silicium, c'est aussi un channel IRC : pour tout savoir, lisez le post-it.

Modérateur : Politburo

Répondre
Avatar de l’utilisateur
fred260571
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 601
Inscription : 19 avr. 2016 13:10
Localisation : Toulouse

Le calcul qui divise : 6÷2(1+2)

Message par fred260571 » 18 nov. 2020 01:30

https://youtu.be/tYf3CpbqAVo
Micmaths

En clair :
6/2*3 = ?
6/(2*3) = 1
ou
(6/2)*3 = 9

sur ma TI 66 c'est 9
sur mon HP 48GX c'est 9 aussi

D'après la vidéo les calculatrices Casio "récentes" donnent 1
et pour Wolfram
6÷2(1+2) = 9
6/2(1+2) = 9
mais
6:2(1+2) = 1

Savez-vous s'il y a des différences entre langages Commodore BASIC / Apple BASIC / CPC BASIC / Python / C / Lua / lisp etc ... ?

Bref j'aime le RPN et aussi le Forth - et je sais pourquoi maintenant 8) 8) 8)
ignorance is bliss
TI 57 II, TI 66, casio fx7500g, HP48GX, HP49G+, HP200LX, palm m125, Sharp PC-G850VS, HP12C

Avatar de l’utilisateur
pir2
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4566
Inscription : 31 oct. 2006 16:08
Localisation : 67310 Westhoffen
Contact :

Re: Le calcul qui divise : 6÷2(1+2)

Message par pir2 » 18 nov. 2020 12:21

fred260571 a écrit :
18 nov. 2020 01:30
Bref j'aime le RPN et aussi le Forth - et je sais pourquoi maintenant 8) 8) 8)
Moi je sais depuis longtemps pour quoi je préfère le RPN ;)

La priorisation "par défaut" des opérations est trop aléatoire en fonction des machines et langages pour que je la trouve pertinente.
En COBOL j'ai toujours préféré utiliser une succession de ADD, DIVIDE, SUBTRACT etc. aux COMPUTE.

Ca m'a d'ailleurs valu une belle frayeur après une mise en prod, j'avais remplacé un COMPUTE "malin" - et non commenté, la doc était dans un tiroir quelque part ailleurs et le COMPUTE en question "jouait" sur ces priorisations - qui arrondissait les centimes à l'avantage du client; après une nuit de batch j'avais fait perdre 11.000 francs (on était en1990 je pense) à l'assurance en question, plus d'un mois de salaire ... heureusement que c'était considéré comme une erreur acceptable, ouf :?
Dans une mission plus tardive, j'ai pu me rendre compte à quel point ces 11.000 francs étaient négligeable pour l'assurance en question, j'ai donc été rassuré à postériori.

Depuis je met des parenthèses partout où il peut y avoir le moindre doute (LISP est-tu là :?: :mrgreen: ).
Image
Image

Avatar de l’utilisateur
Danny
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 484
Inscription : 28 déc. 2013 17:34

Re: Le calcul qui divise : 6÷2(1+2)

Message par Danny » 18 nov. 2020 12:36

Sur Sharp EL-9000, ça donne 1.

En Python, il faut ajouter explicitement la multiplication pour que ça passe, et on voit qu'il fait la division d'abord même sans parenthèses :

Code : Tout sélectionner

>>> 6/2*(1+2)
9.0
Sur HP 48 ça donne 9, mais on est aussi obligé d'ajouter explicitement la multiplication :

Code : Tout sélectionner

'6/2*(1+2)' EVAL
9
Casio fx-702P, 3900p, 7000G, 6000G, 6500G, 6800G, 8500G, 9900GC, 9950GB +, Graph 100+ USB
HP 35, 45, 65, 21, 25, 67, 33E, 41C, 41CX, 20S, 42S, 28S, 32S, 32SII, 48SX, 48S, 48G, 48GX, 50g, 35s, Prime
Sharp PC-1262, EL-9000

Tipoucet
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3705
Inscription : 10 janv. 2009 14:47

Re: Le calcul qui divise : 6÷2(1+2)

Message par Tipoucet » 18 nov. 2020 14:16

Le RPN d'accord mais le simple AOS aussi puisque le calcul en chaîne montrera le résultat de chaque étape. C'est plutôt lors de l'évaluation d'une expression que les comportements peuvent nous abuser non ?
Dominique

Avatar de l’utilisateur
dprtl
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 390
Inscription : 27 janv. 2013 01:26
Localisation : Strasbourg
Contact :

Re: Le calcul qui divise : 6÷2(1+2)

Message par dprtl » 18 nov. 2020 14:51

On en avait parlé en 2019 ici :

http://www.silicium.org/forum/viewtopic ... 41#p530641

La règle à retenir selon moi est la suivante :

"Les opérateurs arithmétiques sont associatifs à gauche, sauf les puissances."

La multiplication dite "implicite" devrait suivre la même règle.

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7099
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Le calcul qui divise : 6÷2(1+2)

Message par gege » 18 nov. 2020 17:38

Bonjour,
Oui on en avait parlé et le bon résultat est 9.
Si on veut diviser par les deux termes, on met deux signes de division : 6/2/(1+2)
QED
G.E.

Avatar de l’utilisateur
frodon69
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3922
Inscription : 29 sept. 2003 22:54
Localisation : A l'ouest de Lyon
Contact :

Re: Le calcul qui divise : 6÷2(1+2)

Message par frodon69 » 24 nov. 2020 14:36

Je me suis toujours demandé pourquoi ce calcul posait question ; mes professeurs de mathématique m'ont toujours dit de calculer d'abord la ou les parenthèses, ce qui nous amène à 6/2*3=9
Frodon69

Je cherche un Amstrad Mega PC, faire offre.

jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2358
Inscription : 17 févr. 2008 00:34
Localisation : Paris 20ème

Re: Le calcul qui divise : 6÷2(1+2)

Message par jxano » 24 nov. 2020 17:42

Ecrit comme dans le titre du fil, c'est un produit implicite (sans le signe "x' ou '*'), j'ai tendance à faire ce produit avant la division quand je lis l'expression.

Lorsqu'on effectue le calcul à la machine, on est quasiment toujours obligé de mettre un signe de multiplication avec forcément un ordre de priorité égal à la division.

A-t-on testé l'opération sur des machines du type Sharp PC-1211 (et ultérieures ?) qui permettent justement le produit implicite ? Mes exemplaires ne sont pas en ordre de marche. Sans doute qu'il faudrait passer par des variables :
A=1+2
B=6/2A
Programmeur abscons.

Avatar de l’utilisateur
dprtl
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 390
Inscription : 27 janv. 2013 01:26
Localisation : Strasbourg
Contact :

Re: Le calcul qui divise : 6÷2(1+2)

Message par dprtl » 24 nov. 2020 17:59

La page Wikipedia en français est plutôt d'accord avec la conclusion de Mickaël Launay dans la vidéo postée initialement :

https://fr.wikipedia.org/wiki/Ordre_des_op%C3%A9rations

La "multiplication implicite est interprétée comme ayant une priorité supérieure à la division" et ceci serait une "convention observée dans les principaux ouvrages de physique". Néanmoins, sur mes calculettes qui supportent la saisie de la multiplication implicite, comme la Casio FX-CP400, il n'y a aucune différence de priorité. Et les opérations de même priorité sont toujours associées de gauche à droite.

Avatar de l’utilisateur
C.Ret
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2390
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Le calcul qui divise : 6÷2(1+2)

Message par C.Ret » 24 nov. 2020 19:08

jxano a écrit :
24 nov. 2020 17:42
[...]A-t-on testé l'opération sur des machines du type Sharp PC-1211 (et ultérieures ?) qui permettent justement le produit implicite ?
Oui sur le SHARP PC-1211, la multiplication implicite n'est possible qu'avec les varaibles, Pas entre les nombres, parenthèses, fonction et autre expression.

De ce fait 6/2(1+2) [ENTER] donne une erreur de syntaxe indiqué par l'affichage de 1...............

De même 2SIN 30 ou RSIN 30donne aussi une erreur de syntaxe.

En utilisant des registres, la multiplication implicite est possible. Mais c'est comme en RPN, c'est l'utilisateur et sa façon de poser le calcul qui aiguille vers un résultat ou l'autre.

Par contre, c'est bien cette multiplication implicite qui influence encore aujourd'hui ma façon d'interpréter ce type d'expression (volontairement) ambigüe.

En effet, si l'on attribue la valeur 1/2 au registre B par l'expression B=.5[ENTER]
Alors, SGN 2B renvoi 1 par contre SGN 2*B renvoi 0.5 comme B*SGN 2

Mais, sémantiquement, les deux expressions ne sont pas correctes, les normes indiquent que l'argument de la fonction doit être entre parenthèse SGN(2B) , SGN(2*B), SGN(2)*B ou moins sournois B*SIN(2).

Cette priorité de la multiplication implicite du SHARP PC-1211 lui est spécifique ainsi |E3B donne 500 mais B|E3 ne fonctionne pas.

On ne peut pas utiliser une machine pour vérifier la validité d'une expression écrite. La machine "interprète" la saisie selon ses propres modes de fonctionnement et les effets secondaire liés à la façon dont son parseur a été programmé.

Ayant été très jeune habitué à cette logique particulière, j'ai toujours tendance à utiliser pour abréger dans un texte et sur une seule ligne l'expression Image par 6/2(1+2) et l'expression Image par 6(1+2)/2.
Cette tendance c'est ensuite confirmée lors de mes études scientifiques et les nombreux ouvrage technique lus où les expressions abusent aussi de coutumes et de notation implicites justifiées par le sens donné aux expression et grandeurs envisagées :

Quelques exemples:

√3∕2∏

cos 2a = cos² a - sin² a
Dernière édition par C.Ret le 24 nov. 2020 22:44, édité 2 fois.
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..

jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2358
Inscription : 17 févr. 2008 00:34
Localisation : Paris 20ème

Re: Le calcul qui divise : 6÷2(1+2)

Message par jxano » 24 nov. 2020 19:22

...Et finalement, on ne sait pas la valeur de B après A=1+2:B=6/2A sur Sharp PC-1211.
Programmeur abscons.

Avatar de l’utilisateur
C.Ret
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2390
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Le calcul qui divise : 6÷2(1+2)

Message par C.Ret » 24 nov. 2020 22:31

jxano a écrit :
24 nov. 2020 19:22
...Et finalement, on ne sait pas la valeur de B après A=1+2:B=6/2A sur Sharp PC-1211.
C'est comme pour SGN 2B, la multiplication implicite a priorité sur (toutes) les autres opérations:
A=1+2,B=6/2A renvoi 1. car est interprété comme étant Image
Mais
A=1+2,B=6/2*A renvoi 9. car est interprété comme étant Image
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..

jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2358
Inscription : 17 févr. 2008 00:34
Localisation : Paris 20ème

Re: Le calcul qui divise : 6÷2(1+2)

Message par jxano » 24 nov. 2020 23:29

Merci, C.Ret ! Voilà un détail qui éclaire ma lanterne.
Programmeur abscons.

Répondre

Revenir vers « Général »