Mieux vaut les factoriser !

Introduction

On les utilises très couramment, elle servent tout et pourtant elles consomment votre CPU : Les fonctions !

Parmi celles-ci, il est une sorte, élémentaire, mais pourtant que vous utilsez très souvent, et pour cause : Les Fonctions à Variable Numérique Réelle

En gros, c'est une fonction mathématique qui prend pour argument des nombres et renvoie comme valeur de retour un autre nombre.

Deux écritures identiques

Si à l'intérieur de ce groupe on se penche sur les équations du second degré, on se rend compte qu'il existe deux manières de représenter la même equation :

    Sub Equa1(ByVal X As Integer)
        Dim k As Integer = 3 * X ^ 2 + 9 * X + 6
    End Sub

    Sub Equa2(ByVal X As Integer)
        Dim k As Integer = 3 * (X - 2) * (X - 1)
    End Sub

Et ici, la même chose pour des décimaux [EDIT: Merci Renfield de m'avoir fait remarquer l'erreur] :

    Sub Equa1(ByVal X As Double)
        Dim k As Double = 3 * X * X + 9 * X + 6)
    End Sub

    Sub Equa2(ByVal X As Double)
        Dim k As Double = 3 * (X - 2) * (X - 1)
    End Sub

Et bien, on constate que la méthode Equa1 (dite "factorisée") est nettement plus rentable que la méthode Equa2 (dite "complète").

Résultats exacts

Faits pour VB 2008, confirmés par un test en JavaScript qui donne des résultats sembles à ce qui est obtenu pour Double :

21236 (Equa1 : Integer)
2266   (Equa2 : Integer)
6831   (Equa1 : Double)
4086   (Equa2 : Double)

Conséquence

Préférez toujours la formule factorisée à la complète, cela accélèrera votre application. Pour convertir d'une forme à l'autre, il faut soit développer (Factorisée > Complète) soit chercher les racines (Discriminant / Réalisant, ...)

[EDIT:Évitez aussi autant que possible l'opérateur '^' qui diminue grandement les performances du programme (voir commentaires)]

Publié samedi 27 octobre 2007 21:07 par FREMYCOMPANY
Classé sous ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

# re: Mieux vaut les factoriser ! dimanche 28 octobre 2007 04:52

a voir la difference entre

3 * X ^ 2 + 9 * X + 6

et

3 * X * X + 9 * X + 6

Renfield

# re: Mieux vaut les factoriser ! dimanche 28 octobre 2007 12:36

Oui, c'est clairement l'opérateur ^ qui est plus lent qu'une multiplication.

A mon avis 3 * X * X + 9 * X + 6 et 3 * (X - 2) * (X - 1)

sont aussi rapides l'une que l'autre

RaptorXP

# re: Mieux vaut les factoriser ! dimanche 28 octobre 2007 14:50

@RenField :: Oui pardon, je me suis trompé en recopiant l'exemple mais le code était juste dans mon test Wink

   Sub Equa1(ByVal X As Double)

       Dim k As Double = 3 * X * X + 9 * X + 6

   End Sub

   Sub Equa2(ByVal X As Double)

       Dim k As Double = 3 * (X - 2) * (X - 1)

   End Sub

Pour ce qui est de la différence x^2 / x*x, je vais vite tester maintenant et je te dis quoi...

---------------------------

En effet, après avoir refait le test, c'est bien l'opérateur "^" qui alourdissait le temps de calcul. Ce qui explique le 6000 / 4000 des double où j'avais mis "x*x".

Qui eût cru que x^2 pouvait causer autant de ralentissement...

FREMYCOMPANY


Les 10 derniers blogs postés

- La suite ...Proposition de collaboration rédactionnelle entre les communautés de développeurs et Microsoft France par LucasR le il y a 11 heures et 47 minutes

- [Fun] Votre simulateur de vol avec Microsoft ESP par Julien Chable le il y a 17 heures et 30 minutes

- [Best Practices] Customisation du My Site : Comment le modifier en amont et en aval par The Mit's Blog le il y a 18 heures et 44 minutes

- Patrick Tisseghem s'en est allé ... par The Mit's Blog le il y a 19 heures et 28 minutes

- MS AutoCollage par alex# le il y a 20 heures et 14 minutes

- Un grand SharePointeur nous a quitte : Patrick Tisseghem manquera à la communauté ! par RedoBlog - The .NET Gentleman !!! le il y a 20 heures et 39 minutes

- [WPF] Comment charger dynamiquement un fichier XAML qui définit des eventhandler ? par Thomas Lebrun le 09-04-2008, 10:56

- Article sur le filtrage des modèles de site SharePoint par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le 09-04-2008, 00:11

- Adopter votre Redo en 3D - Clone Virtuel - avec photosynth par RedoBlog - The .NET Gentleman !!! le 09-04-2008, 00:07

- [Expression Web] Astuce de la Semaine : Mettre en bouton ses macros dans une barre d'outils. par Expression Web & Me le 09-03-2008, 20:48