IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Rapidité opérateur maths


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Par défaut Rapidité opérateur maths
    Bonjour,
    J'utilise un calcul pour trouver la valeur d'une variable a, et un autre pour trouver celle de b:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    double a=7.0d/2.0d;
    double b=0.5d*7.0d;
    Evidemment a=b. Mais quel est l'opérateur qui est le plus rapide des deux: la * ou la / ?

    J'ai essayer de profiler ces lignes, mais impossible de départager.
    Avez-vous une idée ou bien ces 2 opérateurs sont-ils aussi rapide l'un que l'autre?
    Ma question est plus générale: faut-il privilégier les / des * ou l'inverse, ou non ?

    Merci de vous réflexions.

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 667
    Par défaut
    En général , il est admis que la multiplication est plus rapide que la division , si tu veux un petit test pour voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
     
    namespace Test
    {
        class Program
        {
            static void Main(string[] args)
            {
                double test = 1.0d;
                Stopwatch watch = new Stopwatch();
     
                watch.Start();
                for (int i = 0; i < 1000000; i++)
                {
                    test /= 2.0d;
                }
                watch.Stop();
                Console.WriteLine("temps division : " + watch.Elapsed.TotalMilliseconds + " ms");
     
                test = 1.0d;
                watch.Restart();
                for (int i = 0; i < 1000000; i++)
                {
                    test *= 0.5d;
                }
                watch.Stop();
                Console.WriteLine("temps multiplication : " + watch.Elapsed.TotalMilliseconds + " ms");
                Console.ReadLine();
            }
        }
    }
    Ma question est plus générale: faut-il privilégier les / des * ou l'inverse, ou non ?
    Ca dépends , car si la multiplication est plus rapide , il se peut qu'en multipliant par l'inverse , tu subisses une perte de précision.Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double test = 5 / 3;
    double test = 5 * 0.333; // a moins d'aimer écrire plein de 333333

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Par défaut
    Effectivement, j'ai:

    / -> 4,2372 ms
    * -> 3,05 ms

    soit 28% de gain en plus

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    @PixelJuice : +1

    Juste 2 petites remarques :

    ne fait pas ce que tu penses (je te laisses tester)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double test = 5 * 0.333; // a moins d'aimer écrire plein de 333333
    doit pourvoir être remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double oneThird = 1.0 / 3;
    double test = 5 * oneThird;
    avec le meilleur des deux mondes : précision et multiplication.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. De la rapidité du code
    Par jfloviou dans le forum Contribuez
    Réponses: 233
    Dernier message: 29/05/2009, 02h17
  2. Rapidite enregistrement
    Par mika dans le forum Débuter
    Réponses: 9
    Dernier message: 25/04/2003, 15h15
  3. Problème de math....
    Par zdra dans le forum Mathématiques
    Réponses: 6
    Dernier message: 11/11/2002, 10h59
  4. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 22h22
  5. Maths : équations
    Par Anonymous dans le forum Mathématiques
    Réponses: 5
    Dernier message: 02/05/2002, 16h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo