Merci nicola, j'ai suivi ton conseil. "bc" est un programme intéressant.
J'avais testé autrefois "gmp" qui possède heureusement plusieurs wrappers C++.
CLN est un must de souplesse et de rapidité, avec des tas de fonctions écrites en assembleur.
Comme c'est une librairie C++, on peut, de plus, l'employer, par exemple, avec la Standard
Template Library qui pourvoit vecteurs, listes, ensembles... pour y mettre ces nombres,
avec des tas d'algorithmes associés.
Voici, réécrit pour CLN un des programmes de test fournis avec les sources - des multiplications - de "bc".
Bien sûr un compilateur vs un interpréteur, y'a pas photo : 1,2 s contre 14,9 s pour l'original.
sarge:~/sources/bc/bc-1.06/Test$ cat mul.b
scale = 20
for (i=0; i<10000; i++) {
for (j=1; j<100; j++) b=i*j
}
b
for (i=0; i<10000; i++) {
for
(j=1000000000000000000000000000000000000000000000000000000000000000000; \
j<1000000000000000000000000000000000000000000000000000000000000000100; \
j++) b=i*j
}
b
quit
sarge:~/sources/bc/bc-1.06/Test$ time bc -l mul.b
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
989901
99990000000000000000000000000000000000000000000000000000000000009899\
01
real 0m14.935s
user 0m14.922s
sys 0m0.003s
sarge:~/sources/bc/bc-1.06/Test$ # et le programme de test réécrit pour CLN
sarge:~/sources/bc/bc-1.06/Test$ cd cln
sarge:~/sources/bc/bc-1.06/Test/cln$ cat mul.c++
#include <cln/integer.h>
#include <cln/integer_io.h>
using namespace cln;
using namespace std;
int main( void ){
cl_I b, i;
for( i =0; i<10000; i =i+1 )
for( cl_I j(1); j<100; j =j+1 )
b =i*j;
cout << b << endl;
cl_I
jMax("1000000000000000000000000000000000000000000000000000000000000000100");
for( i =0; i<10000; i =i+1 )
for(cl_I
j("1000000000000000000000000000000000000000000000000000000000000000000");
j<jMax; j =j+1 )
b =i*j;
cout << b << endl;
return EXIT_SUCCESS;
}
sarge:~/sources/bc/bc-1.06/Test/cln$ time ./mul
989901
9999000000000000000000000000000000000000000000000000000000000000989901
real 0m1.219s
user 0m1.125s
sys 0m0.006s
sarge:~/sources/bc/bc-1.06/Test/cln$
----------------------------------
Les chiens aboient, Henri bêle...
Poste le Sunday 22 January 2006 22:44:55