Bonjour,
Je dois choisir un outil de développement en vue d'un projet nécessitant des calculs intensifs (logiciel d'emploi du temps).
J'ai utilisé l'an passé Delphi pour une première version (qui assurait interface et calcul), mais il semble qu'il n'existe plus de version "amateur" gratuite et suis donc, à terme condamné à changer (d'autant que j'ai changé de machine). J'envisage maintenant Lazarus ou Visual C++ (seulement pour la partie calculs, l'interface sera probablement faite avec open office).
J'ai réalisé sous Delphi 2007, Lazarus, et Visual C++ 2008 une comparaison de la vitesse d'exécution d'une boucle réalisant 1 milliard de multiplications et de divisions (entières) d'entiers longs.
Résultats sur ma machine :
8s avec Delphi
14s en Visual C++
26s sous Lazarus
Je suis assez déçu de la performance de C++, que j'utilise pour la première fois, et que je pensais être le plus véloce... un facteur deux, ce n'est pas négligeable pour le type d'application que j'envisage.
Mes questions, si vous avez un peu de temps, sont les suivantes :
- Ma procédure de test vous parait-elle pertinente ?
- Ces résultats sont-ils conformes à ce que vous savez de ces langages/compilateurs ?
- Auriez-vous d'autres suggestions (langage - compilateur -éditeur) ?
Ci-dessous les différents codes sources (rien de mystérieux évidemment; je ne les indique que pour une détection d'éventuelle idiotie de ma part ralentissant tel ou tel programme).
Merci !
**************
Pascal (compilé avec Delphi ou Lazarus)
**************
procedure TForm1.Button1Click(Sender: TObject);
var k, N, x: LongInt;
T1, T2, D : TTime;
begin
N := 1000000000;
T1 := Time;
x := 24563;
for k := 0 to N - 1 do
begin
x := x*x+1;
x := x div x
end;
T2 := Time;
D := T2-T1;
ShowMessage(TimetoStr(D))
end;
**************
**************
C++ (compilé avec
******************
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
time_t T1, T2;
double D;
long N,k, x;
cout << "Entrer le nombre d'iterations :" << endl;
cin >> N;
cout << endl << "C'est parti pour " << N <<" d'iterations !" <<endl;
time(&T1);
x = 23563;
for(k=0;k<=N-1;k++)
{x = x*x+1; x = x/x;}
time(&T2);
D = difftime(T2,T1);
cout <<D <<"\n";
return 0;
}
Partager