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)]

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 :
Publié 27 octobre 07 09:07 par FREMYCOMPANY
Classé sous : ,

Commentaires

# Renfield said on octobre 28, 2007 04:52:

a voir la difference entre

3 * X ^ 2 + 9 * X + 6

et

3 * X * X + 9 * X + 6

# RaptorXP said on octobre 28, 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

# FREMYCOMPANY said on octobre 28, 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...

Les commentaires anonymes sont désactivés

About FREMYCOMPANY

François REMY est un jeune développeur belge plein d'entrain qui traite surtout des technologies du web et de DotNet dans ses articles.


Les 10 derniers blogs postés

- [SharePoint] Les sessions TechDays 2012… par Le blog de Patrick [MVP SharePoint] le il y a 5 heures et 15 minutes

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le 02-09-2012, 11:01

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59




Search

Go

Ce blog

Abonnements