Derterminer si un nombre st pair avec les calcul

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
Magistrat1
Membre Naturel
Messages: 27
Enregistré le: 17 Fév 2018, 11:22

Derterminer si un nombre st pair avec les calcul

par Magistrat1 » 18 Juil 2019, 12:18

Bonjour,
J'aimerais savoir comment peut-on déterminer si un nombre est pair avec des calculs dans tous le temps écrire que x et pair si : x mod 2 =0



GaBuZoMeu
Habitué(e)
Messages: 6020
Enregistré le: 05 Mai 2019, 10:07

Re: Derterminer si un nombre st pair avec les calcul

par GaBuZoMeu » 18 Juil 2019, 12:27

Un entier naturel est pair si et seulement si son chiffre des unités est pair. Tu ne le savais pas ???

Magistrat1
Membre Naturel
Messages: 27
Enregistré le: 17 Fév 2018, 11:22

Re: Derterminer si un nombre st pair avec les calcul

par Magistrat1 » 19 Juil 2019, 00:03

Merci pour ton retour GaBuZoMeu, oui bien sur que je le savais, je ne mettais peut etre pas assez bien expliquer, ce que j'assai de dire c'est comment le calculer sans detection visuel ( sans connaitre le nombre)...

GaBuZoMeu
Habitué(e)
Messages: 6020
Enregistré le: 05 Mai 2019, 10:07

Re: Derterminer si un nombre st pair avec les calcul

par GaBuZoMeu » 19 Juil 2019, 06:47

C'est une blague ? Sans connaître un nombre, tu veux décider s'il est pair ou non ?

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

Re: Derterminer si un nombre st pair avec les calcul

par fatal_error » 19 Juil 2019, 08:31

bj,

variante avec division entiere (telle que en c++ par ex)
x pair => (x/2)*2==x
123/2=61, 61*2=122, 122!=123
la vie est une fête :)

Magistrat1
Membre Naturel
Messages: 27
Enregistré le: 17 Fév 2018, 11:22

Re: Derterminer si un nombre st pair avec les calcul

par Magistrat1 » 20 Juil 2019, 23:28

Oui @GaBuZoMeu il suffit de le remplacer par ... une variable ! Merci @fatal_error vous m'avez encore bien aider

GaBuZoMeu
Habitué(e)
Messages: 6020
Enregistré le: 05 Mai 2019, 10:07

Re: Derterminer si un nombre st pair avec les calcul

par GaBuZoMeu » 21 Juil 2019, 08:01

J'ai du mal à comprendre le sens de ce fil. Quelqu'un pourrait-il me l'expliquer ?

Le fin mot de l'histoire c'est que Magistrat1 a cassé la touche % de son clavier ? C'est ça ? Sinon, quelqu'un peut-il m'expliquer la différence entre x==2*(x/2) et x%2==0 ?

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

Re: Derterminer si un nombre st pair avec les calcul

par fatal_error » 21 Juil 2019, 09:00

slt gbzm,

une explication parmi celles que je peux pas connaitre...
on peut se demander si il existe pas une fonction plus rapide que modulo, ne serait-ce que pour la curiosité.

en l'occurrence:
Code: Tout sélectionner
int main(int argc, char* argv[]){
    return (argc/2)*2 == 0;
}

Code: Tout sélectionner
int main(int argc, char* argv[]){
    return (argc%2) == 0;
}

ne génèrent pas (ouf!) les même instructions

Code: Tout sélectionner
//div.cpp                             //mod.cpp
.LFB0:                                   .LFB0:
...
        movl    %eax, %edx            |          andl    $1, %eax
        shrl    $31, %edx             <
        addl    %edx, %eax            <
        sarl    %eax                  <
        addl    %eax, %eax            <
        testl   %eax, %eax                       testl   %eax, %eax
        sete    %al                              sete    %al
        movzbl  %al, %eax                        movzbl  %al, %eax
        popq    %rbp                             popq    %rbp
        .cfi_def_cfa 7, 8                        .cfi_def_cfa 7, 8
        ret                                      ret




notamment en O3:
Code: Tout sélectionner
//div.cpp                     //mod.cpp
.LFB0:                          .LFB0:
        .cfi_startproc                  .cfi_startproc
        addl    $1, %edi     |          movl    %edi, %eax
        xorl    %eax, %eax   |          andl    $1, %eax
        cmpl    $2, %edi     |          xorl    $1, %eax
        setbe   %al          <
        ret                             ret
                             >          .cfi_endproc



je passe les interprétations (parce que jconnais pas mes instructions et ca m'intéresse pas outre mesure) mais on retient que _peut-être_ sur une architecture étrange, mod sera plus lent qu'appliquer une division. et si on retient pas ça on peut se demander de combien la division sera plus lente

edit: asm tronqué...à partie intéressante
la vie est une fête :)

pascal16
Membre Légendaire
Messages: 6663
Enregistré le: 01 Mar 2017, 13:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Derterminer si un nombre st pair avec les calcul

par pascal16 » 21 Juil 2019, 09:12

en binaire, la parité, c'est juste regarder si le dernier bit est à 0 ou à 1.
et on a même pas à faire un "et 0000001" car le processeur a un "parity flag"
les processeurs récents faisant les flags sans passer par le CPU, on peut même mettre 0 cycle équivalent horloge comme temps d'exécution.
donc tout dépend de l'intelligence du compilateur quand à la vitesse finale.

GaBuZoMeu
Habitué(e)
Messages: 6020
Enregistré le: 05 Mai 2019, 10:07

Re: Derterminer si un nombre st pair avec les calcul

par GaBuZoMeu » 21 Juil 2019, 09:18

Ça serait plutôt
return (argc/2)*2 == argc;

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

Re: Derterminer si un nombre st pair avec les calcul

par fatal_error » 21 Juil 2019, 09:48

return (argc/2)*2 == argc;

bien vu Sherlock

les processeurs récents faisant les flags sans passer par le CPU

je présume que tu voulais dire ALU
la vie est une fête :)

pascal16
Membre Légendaire
Messages: 6663
Enregistré le: 01 Mar 2017, 13:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Derterminer si un nombre st pair avec les calcul

par pascal16 » 21 Juil 2019, 16:48

vi

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 8 invités

cron

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite