j'ai essayé de faire un programme qui me calcule la somme de la série
harmonique sur des grands nombres. Quelle n'a pas été ma surprise de
constater que le programme en C++ était environ deux fois plus long que
le même programme qu'en java
Je suis à peu près certain que cela ne vient pas du programme (j'en ai
fait un de mon crû et plusieurs récupérés sur internet)
pourriez-vous m'expliquer cela ? il est vrai que je ne maîtrise pas les
subtilités du compilateur étant novice en la matière, cela pourrait-il
venir de cela ?
j'ai essayé de faire un programme qui me calcule la somme de la série
harmonique sur des grands nombres. Quelle n'a pas été ma surprise de
constater que le programme en C++ était environ deux fois plus long que
le même programme qu'en java
Je suis à peu près certain que cela ne vient pas du programme (j'en ai
fait un de mon crû et plusieurs récupérés sur internet)
pourriez-vous m'expliquer cela ? il est vrai que je ne maîtrise pas les
subtilités du compilateur étant novice en la matière, cela pourrait-il
venir de cela ?
j'ai essayé de faire un programme qui me calcule la somme de la série
harmonique sur des grands nombres. Quelle n'a pas été ma surprise de
constater que le programme en C++ était environ deux fois plus long que
le même programme qu'en java
Je suis à peu près certain que cela ne vient pas du programme (j'en ai
fait un de mon crû et plusieurs récupérés sur internet)
pourriez-vous m'expliquer cela ? il est vrai que je ne maîtrise pas les
subtilités du compilateur étant novice en la matière, cela pourrait-il
venir de cela ?
xfredox wrote:j'ai essayé de faire un programme qui me calcule la somme de la série
harmonique sur des grands nombres. Quelle n'a pas été ma surprise de
constater que le programme en C++ était environ deux fois plus long que
le même programme qu'en java
Je suis à peu près certain que cela ne vient pas du programme (j'en ai
fait un de mon crû et plusieurs récupérés sur internet)
pourriez-vous m'expliquer cela ? il est vrai que je ne maîtrise pas les
subtilités du compilateur étant novice en la matière, cela pourrait-il
venir de cela ?
Bonjour,
les programmes ne doivent pas être bien longs, ça aiderait de pouvoir y
jeter un oeil avant de répondre. La notion de "grand nombre" est en
particulier assez floue...
Le nom du compilateur, les options, la machine dessous, sont d'autres
infos qui pourraient servir.
xfredox wrote:
j'ai essayé de faire un programme qui me calcule la somme de la série
harmonique sur des grands nombres. Quelle n'a pas été ma surprise de
constater que le programme en C++ était environ deux fois plus long que
le même programme qu'en java
Je suis à peu près certain que cela ne vient pas du programme (j'en ai
fait un de mon crû et plusieurs récupérés sur internet)
pourriez-vous m'expliquer cela ? il est vrai que je ne maîtrise pas les
subtilités du compilateur étant novice en la matière, cela pourrait-il
venir de cela ?
Bonjour,
les programmes ne doivent pas être bien longs, ça aiderait de pouvoir y
jeter un oeil avant de répondre. La notion de "grand nombre" est en
particulier assez floue...
Le nom du compilateur, les options, la machine dessous, sont d'autres
infos qui pourraient servir.
xfredox wrote:j'ai essayé de faire un programme qui me calcule la somme de la série
harmonique sur des grands nombres. Quelle n'a pas été ma surprise de
constater que le programme en C++ était environ deux fois plus long que
le même programme qu'en java
Je suis à peu près certain que cela ne vient pas du programme (j'en ai
fait un de mon crû et plusieurs récupérés sur internet)
pourriez-vous m'expliquer cela ? il est vrai que je ne maîtrise pas les
subtilités du compilateur étant novice en la matière, cela pourrait-il
venir de cela ?
Bonjour,
les programmes ne doivent pas être bien longs, ça aiderait de pouvoir y
jeter un oeil avant de répondre. La notion de "grand nombre" est en
particulier assez floue...
Le nom du compilateur, les options, la machine dessous, sont d'autres
infos qui pourraient servir.
Le 01/09/2012 15:33, Marc a écrit :xfredox wrote:j'ai essayé de faire un programme qui me calcule la somme de la série
harmonique sur des grands nombres. Quelle n'a pas été ma surprise de
constater que le programme en C++ était environ deux fois plus long que
le même programme qu'en java
Je suis à peu près certain que cela ne vient pas du programme (j'en ai
fait un de mon crû et plusieurs récupérés sur internet)
pourriez-vous m'expliquer cela ? il est vrai que je ne maîtrise pas les
subtilités du compilateur étant novice en la matière, cela pourrait-il
venir de cela ?
Bonjour,
les programmes ne doivent pas être bien longs, ça aiderait de pouvoir y
jeter un oeil avant de répondre. La notion de "grand nombre" est en
particulier assez floue...
Le nom du compilateur, les options, la machine dessous, sont d'autres
infos qui pourraient servir.
Bonsoir,
Ci-dessous le code en java: (9 secondes)
public class premier
{
public static void main (String[] args)
{
int i;
float b=0;
for (i=1;i<2000000000;i++)//
{b=b+(float)+1/i;}
System.out.println(b);
}
}
Maintenant le code en C++: (15 secondes)
#include <iostream>
using namespace std;
int main()
{
int i;
float b=0;
for(i=1;i<2000000000;i++)
{
b=b+(float)1/i;
}
cout << "Resultat: "<< b<< endl;
return 0;
}
Je suis sous ubuntu 12.04 64
J'utilise eclipse pour java et code:block pour c++
A noter que si je passe en ligne de commande les temps sont relativement
les mêmes (à quelques dixièmes de secondes)
(en ligne de commande j'utilise java 6 et g++)
J'ai les mêmes résultats sous w7
Comment expliquer une telle différence ? Comment y remédier ?
par avance, merci
Fred
Le 01/09/2012 15:33, Marc a écrit :
xfredox wrote:
j'ai essayé de faire un programme qui me calcule la somme de la série
harmonique sur des grands nombres. Quelle n'a pas été ma surprise de
constater que le programme en C++ était environ deux fois plus long que
le même programme qu'en java
Je suis à peu près certain que cela ne vient pas du programme (j'en ai
fait un de mon crû et plusieurs récupérés sur internet)
pourriez-vous m'expliquer cela ? il est vrai que je ne maîtrise pas les
subtilités du compilateur étant novice en la matière, cela pourrait-il
venir de cela ?
Bonjour,
les programmes ne doivent pas être bien longs, ça aiderait de pouvoir y
jeter un oeil avant de répondre. La notion de "grand nombre" est en
particulier assez floue...
Le nom du compilateur, les options, la machine dessous, sont d'autres
infos qui pourraient servir.
Bonsoir,
Ci-dessous le code en java: (9 secondes)
public class premier
{
public static void main (String[] args)
{
int i;
float b=0;
for (i=1;i<2000000000;i++)//
{b=b+(float)+1/i;}
System.out.println(b);
}
}
Maintenant le code en C++: (15 secondes)
#include <iostream>
using namespace std;
int main()
{
int i;
float b=0;
for(i=1;i<2000000000;i++)
{
b=b+(float)1/i;
}
cout << "Resultat: "<< b<< endl;
return 0;
}
Je suis sous ubuntu 12.04 64
J'utilise eclipse pour java et code:block pour c++
A noter que si je passe en ligne de commande les temps sont relativement
les mêmes (à quelques dixièmes de secondes)
(en ligne de commande j'utilise java 6 et g++)
J'ai les mêmes résultats sous w7
Comment expliquer une telle différence ? Comment y remédier ?
par avance, merci
Fred
Le 01/09/2012 15:33, Marc a écrit :xfredox wrote:j'ai essayé de faire un programme qui me calcule la somme de la série
harmonique sur des grands nombres. Quelle n'a pas été ma surprise de
constater que le programme en C++ était environ deux fois plus long que
le même programme qu'en java
Je suis à peu près certain que cela ne vient pas du programme (j'en ai
fait un de mon crû et plusieurs récupérés sur internet)
pourriez-vous m'expliquer cela ? il est vrai que je ne maîtrise pas les
subtilités du compilateur étant novice en la matière, cela pourrait-il
venir de cela ?
Bonjour,
les programmes ne doivent pas être bien longs, ça aiderait de pouvoir y
jeter un oeil avant de répondre. La notion de "grand nombre" est en
particulier assez floue...
Le nom du compilateur, les options, la machine dessous, sont d'autres
infos qui pourraient servir.
Bonsoir,
Ci-dessous le code en java: (9 secondes)
public class premier
{
public static void main (String[] args)
{
int i;
float b=0;
for (i=1;i<2000000000;i++)//
{b=b+(float)+1/i;}
System.out.println(b);
}
}
Maintenant le code en C++: (15 secondes)
#include <iostream>
using namespace std;
int main()
{
int i;
float b=0;
for(i=1;i<2000000000;i++)
{
b=b+(float)1/i;
}
cout << "Resultat: "<< b<< endl;
return 0;
}
Je suis sous ubuntu 12.04 64
J'utilise eclipse pour java et code:block pour c++
A noter que si je passe en ligne de commande les temps sont relativement
les mêmes (à quelques dixièmes de secondes)
(en ligne de commande j'utilise java 6 et g++)
J'ai les mêmes résultats sous w7
Comment expliquer une telle différence ? Comment y remédier ?
par avance, merci
Fred
In article <5042505f$0$2381$,
xfredox wrote:Le 01/09/2012 15:33, Marc a écrit :xfredox wrote:j'ai essayé de faire un programme qui me calcule la somme de la série
harmonique sur des grands nombres. Quelle n'a pas été ma surprise de
constater que le programme en C++ était environ deux fois plus long que
le même programme qu'en java
Je suis à peu près certain que cela ne vient pas du programme (j'en ai
fait un de mon crû et plusieurs récupérés sur internet)
pourriez-vous m'expliquer cela ? il est vrai que je ne maîtrise pas les
subtilités du compilateur étant novice en la matière, cela pourrait-il
venir de cela ?
Bonjour,
les programmes ne doivent pas être bien longs, ça aiderait de pouvoir y
jeter un oeil avant de répondre. La notion de "grand nombre" est en
particulier assez floue...
Le nom du compilateur, les options, la machine dessous, sont d'autres
infos qui pourraient servir.
Bonsoir,
Ci-dessous le code en java: (9 secondes)
public class premier
{
public static void main (String[] args)
{
int i;
float b=0;
for (i=1;i<2000000000;i++)//
{b=b+(float)+1/i;}
System.out.println(b);
}
}
Maintenant le code en C++: (15 secondes)
#include <iostream>
using namespace std;
int main()
{
int i;
float b=0;
for(i=1;i<2000000000;i++)
{
b=b+(float)1/i;
}
cout << "Resultat: "<< b<< endl;
return 0;
}
Je suis sous ubuntu 12.04 64
J'utilise eclipse pour java et code:block pour c++
A noter que si je passe en ligne de commande les temps sont relativement
les mêmes (à quelques dixièmes de secondes)
(en ligne de commande j'utilise java 6 et g++)
J'ai les mêmes résultats sous w7
Comment expliquer une telle différence ? Comment y remédier ?
par avance, merci
Fred
Toujours aucunes options de compile (qui sont sans doute differentes).
De facon plus interessante, ca ne sert pas a grand chose d'avoir un programme
qui affiche un resultat completement faux.
Je viens de regarder ton code C++:
Resultat: 15.4037
et avec des double:
Resultat: 21.9936
La deuxieme valeur etant relativement proche de la realite,
qui est ln 2000000000 + gamma =~ 21.9941
a 1/4000000000 pres...
In article <5042505f$0$2381$426a74cc@news.free.fr>,
xfredox <xfredox@free.fr> wrote:
Le 01/09/2012 15:33, Marc a écrit :
xfredox wrote:
j'ai essayé de faire un programme qui me calcule la somme de la série
harmonique sur des grands nombres. Quelle n'a pas été ma surprise de
constater que le programme en C++ était environ deux fois plus long que
le même programme qu'en java
Je suis à peu près certain que cela ne vient pas du programme (j'en ai
fait un de mon crû et plusieurs récupérés sur internet)
pourriez-vous m'expliquer cela ? il est vrai que je ne maîtrise pas les
subtilités du compilateur étant novice en la matière, cela pourrait-il
venir de cela ?
Bonjour,
les programmes ne doivent pas être bien longs, ça aiderait de pouvoir y
jeter un oeil avant de répondre. La notion de "grand nombre" est en
particulier assez floue...
Le nom du compilateur, les options, la machine dessous, sont d'autres
infos qui pourraient servir.
Bonsoir,
Ci-dessous le code en java: (9 secondes)
public class premier
{
public static void main (String[] args)
{
int i;
float b=0;
for (i=1;i<2000000000;i++)//
{b=b+(float)+1/i;}
System.out.println(b);
}
}
Maintenant le code en C++: (15 secondes)
#include <iostream>
using namespace std;
int main()
{
int i;
float b=0;
for(i=1;i<2000000000;i++)
{
b=b+(float)1/i;
}
cout << "Resultat: "<< b<< endl;
return 0;
}
Je suis sous ubuntu 12.04 64
J'utilise eclipse pour java et code:block pour c++
A noter que si je passe en ligne de commande les temps sont relativement
les mêmes (à quelques dixièmes de secondes)
(en ligne de commande j'utilise java 6 et g++)
J'ai les mêmes résultats sous w7
Comment expliquer une telle différence ? Comment y remédier ?
par avance, merci
Fred
Toujours aucunes options de compile (qui sont sans doute differentes).
De facon plus interessante, ca ne sert pas a grand chose d'avoir un programme
qui affiche un resultat completement faux.
Je viens de regarder ton code C++:
Resultat: 15.4037
et avec des double:
Resultat: 21.9936
La deuxieme valeur etant relativement proche de la realite,
qui est ln 2000000000 + gamma =~ 21.9941
a 1/4000000000 pres...
In article <5042505f$0$2381$,
xfredox wrote:Le 01/09/2012 15:33, Marc a écrit :xfredox wrote:j'ai essayé de faire un programme qui me calcule la somme de la série
harmonique sur des grands nombres. Quelle n'a pas été ma surprise de
constater que le programme en C++ était environ deux fois plus long que
le même programme qu'en java
Je suis à peu près certain que cela ne vient pas du programme (j'en ai
fait un de mon crû et plusieurs récupérés sur internet)
pourriez-vous m'expliquer cela ? il est vrai que je ne maîtrise pas les
subtilités du compilateur étant novice en la matière, cela pourrait-il
venir de cela ?
Bonjour,
les programmes ne doivent pas être bien longs, ça aiderait de pouvoir y
jeter un oeil avant de répondre. La notion de "grand nombre" est en
particulier assez floue...
Le nom du compilateur, les options, la machine dessous, sont d'autres
infos qui pourraient servir.
Bonsoir,
Ci-dessous le code en java: (9 secondes)
public class premier
{
public static void main (String[] args)
{
int i;
float b=0;
for (i=1;i<2000000000;i++)//
{b=b+(float)+1/i;}
System.out.println(b);
}
}
Maintenant le code en C++: (15 secondes)
#include <iostream>
using namespace std;
int main()
{
int i;
float b=0;
for(i=1;i<2000000000;i++)
{
b=b+(float)1/i;
}
cout << "Resultat: "<< b<< endl;
return 0;
}
Je suis sous ubuntu 12.04 64
J'utilise eclipse pour java et code:block pour c++
A noter que si je passe en ligne de commande les temps sont relativement
les mêmes (à quelques dixièmes de secondes)
(en ligne de commande j'utilise java 6 et g++)
J'ai les mêmes résultats sous w7
Comment expliquer une telle différence ? Comment y remédier ?
par avance, merci
Fred
Toujours aucunes options de compile (qui sont sans doute differentes).
De facon plus interessante, ca ne sert pas a grand chose d'avoir un programme
qui affiche un resultat completement faux.
Je viens de regarder ton code C++:
Resultat: 15.4037
et avec des double:
Resultat: 21.9936
La deuxieme valeur etant relativement proche de la realite,
qui est ln 2000000000 + gamma =~ 21.9941
a 1/4000000000 pres...
J'ai trouvé l'option fast en cherchant dans le man de g++
J'ai trouvé l'option fast en cherchant dans le man de g++
J'ai trouvé l'option fast en cherchant dans le man de g++
On Sat, 01 Sep 2012 21:35:11 +0200, xfredox :J'ai trouvé l'option fast en cherchant dans le man de g++
http://gcc.gnu.org/onlinedocs/gcc-4.6.0/gcc/Optimize-Options.html
-Ofast
Disregard strict standards compliance. -Ofast enables all -O3
optimizations. It also enables optimizations that are not valid for
all standard compliant programs. It turns on -ffast-math.
On Sat, 01 Sep 2012 21:35:11 +0200, xfredox <xfredox@free.fr>:
J'ai trouvé l'option fast en cherchant dans le man de g++
http://gcc.gnu.org/onlinedocs/gcc-4.6.0/gcc/Optimize-Options.html
-Ofast
Disregard strict standards compliance. -Ofast enables all -O3
optimizations. It also enables optimizations that are not valid for
all standard compliant programs. It turns on -ffast-math.
On Sat, 01 Sep 2012 21:35:11 +0200, xfredox :J'ai trouvé l'option fast en cherchant dans le man de g++
http://gcc.gnu.org/onlinedocs/gcc-4.6.0/gcc/Optimize-Options.html
-Ofast
Disregard strict standards compliance. -Ofast enables all -O3
optimizations. It also enables optimizations that are not valid for
all standard compliant programs. It turns on -ffast-math.
g++ -O3 -s main.cpp 13s
g++ -Ofast -s main.cpp 7s
Eclipse doit faire une ou deux petite(s) optimisation(s) puisque c'est
plus rapide que la ligne de commande (et dire que je pensais qu'un IDE
c'était forcément plus long)
Par contre effectivement dans le meilleur des cas, le C++ devient deux
fois plus rapide que Java, impressionnant ! (et logique)
J'ai trouvé l'option fast en cherchant dans le man de g++, par contre je
ne sais pas exactement comment elle fonctionne en dehors du fait qu'elle
augmente de façon tangible la vitesse (je n'ai pas vraiment trouvé de
description dessus sur le net), une idée ?
g++ -O3 -s main.cpp 13s
g++ -Ofast -s main.cpp 7s
Eclipse doit faire une ou deux petite(s) optimisation(s) puisque c'est
plus rapide que la ligne de commande (et dire que je pensais qu'un IDE
c'était forcément plus long)
Par contre effectivement dans le meilleur des cas, le C++ devient deux
fois plus rapide que Java, impressionnant ! (et logique)
J'ai trouvé l'option fast en cherchant dans le man de g++, par contre je
ne sais pas exactement comment elle fonctionne en dehors du fait qu'elle
augmente de façon tangible la vitesse (je n'ai pas vraiment trouvé de
description dessus sur le net), une idée ?
g++ -O3 -s main.cpp 13s
g++ -Ofast -s main.cpp 7s
Eclipse doit faire une ou deux petite(s) optimisation(s) puisque c'est
plus rapide que la ligne de commande (et dire que je pensais qu'un IDE
c'était forcément plus long)
Par contre effectivement dans le meilleur des cas, le C++ devient deux
fois plus rapide que Java, impressionnant ! (et logique)
J'ai trouvé l'option fast en cherchant dans le man de g++, par contre je
ne sais pas exactement comment elle fonctionne en dehors du fait qu'elle
augmente de façon tangible la vitesse (je n'ai pas vraiment trouvé de
description dessus sur le net), une idée ?
Par contre effectivement dans le meilleur des cas, le C++ devient deux
fois plus rapide que Java, impressionnant ! (et logique)
J'ai trouvé l'option fast en cherchant dans le man de g++, par contre je
ne sais pas exactement comment elle fonctionne en dehors du fait qu'elle
augmente de façon tangible la vitesse (je n'ai pas vraiment trouvé de
description dessus sur le net), une idée ?
Tout processeur moderne est "pipeline" avec l'execution de plusieurs
instructions qui se chevauchent.
Dans un code comme 1/i, tu peux avoir des divisions par zero, donc
stricto-sensu, tu peux etre amene a mettre un "stop" pour dire au
processeur de finir l'instruction et s'assurer qu'il n'y a pas de
division par zero avant de continuer.
C'est globalement surtout ce genre de choses que va faire -ffast-math...
Par contre effectivement dans le meilleur des cas, le C++ devient deux
fois plus rapide que Java, impressionnant ! (et logique)
J'ai trouvé l'option fast en cherchant dans le man de g++, par contre je
ne sais pas exactement comment elle fonctionne en dehors du fait qu'elle
augmente de façon tangible la vitesse (je n'ai pas vraiment trouvé de
description dessus sur le net), une idée ?
Tout processeur moderne est "pipeline" avec l'execution de plusieurs
instructions qui se chevauchent.
Dans un code comme 1/i, tu peux avoir des divisions par zero, donc
stricto-sensu, tu peux etre amene a mettre un "stop" pour dire au
processeur de finir l'instruction et s'assurer qu'il n'y a pas de
division par zero avant de continuer.
C'est globalement surtout ce genre de choses que va faire -ffast-math...
Par contre effectivement dans le meilleur des cas, le C++ devient deux
fois plus rapide que Java, impressionnant ! (et logique)
J'ai trouvé l'option fast en cherchant dans le man de g++, par contre je
ne sais pas exactement comment elle fonctionne en dehors du fait qu'elle
augmente de façon tangible la vitesse (je n'ai pas vraiment trouvé de
description dessus sur le net), une idée ?
Tout processeur moderne est "pipeline" avec l'execution de plusieurs
instructions qui se chevauchent.
Dans un code comme 1/i, tu peux avoir des divisions par zero, donc
stricto-sensu, tu peux etre amene a mettre un "stop" pour dire au
processeur de finir l'instruction et s'assurer qu'il n'y a pas de
division par zero avant de continuer.
C'est globalement surtout ce genre de choses que va faire -ffast-math...
et en français ça donne quoi
et en français ça donne quoi
et en français ça donne quoi
et en français ça donne quoi ? :D
et en français ça donne quoi ? :D
et en français ça donne quoi ? :D