Vous n'êtes pas identifié.
Bonjour, je developpe en ce moment une DLL contenant des fonctions mathématiques, de la simple addition au PGCD en passant par perimètres aires et volumes de figures géométriques..., [voir : http://sayro.free.fr/SamSoft/logiciels/ … ll_doc.txt] je voudrais la créer avec vous (programmeurs C/C++) , il faudrait simplement à partir de ce forum (ou de mon forum : http://www.samsoft.frbb.net , dans la rubrique "samsoft_maths DLL") , mettre des idées sur de nouvelles fonctions (comme des fonctions de conversions ou des fonctions permettant de dessiner un cercle, un triangle...).
Grâce à ma dll ou plutôt à notre dll (pour ceux qui participeront), j'aimerai qu'une communauté se crée pour réaliser une calculette de type "avancée" en mode graphique (pas console) en C ou C++ intégrant toutes les fonctions de la dll, cela permettra de créer peut-être "la futur calculette" d'une distribution de GNU/Linux !
Pour l'instant, ma dll est disponible pour Windows (prochainement sur Mac) mais je voudrai tant qu'elle le soit sur GNU/Linux.
Voilà les sources de ma dll (dans un zip) : http://sayro.free.fr/SamSoft/logiciels/ … _Maths.zip
![]()
Swisslinux.org s'est doté d'une charte précise concernant les catégories sur son forum. Veuillez en respecter les termes.
Catégorie originale: Groupes de projets
Déplacé dans: Développement
Modérateur: calimarno
Dernière modification par calimarno (27 Feb 2007 13:31:56)
Hors ligne
citez moi une seul règle qui me dise que je ne suis pas dans mon droit !
Hors ligne
Tout va bien!
La seul chose que Calimarno dit à travers ce bandeau (intimidant, il faut l'avouer...) c'est que ton message eût été mieux placé dès le départ dans la catégorie Développement.
Faîtes-vous une bise et on en parle plus. Allez...
Hors ligne
Petite bise (lol, ok j'avais mal compris, il aurait pu simplement écrire "Vous vous êtes trompé de partie de forum, je déplace
"), lol, c'est oublié ? "De quoi je parlais déjà
"!
Hors ligne
Hello,
Les fonctions que tu implémentes sont déja disponibles, ou implémentables trivialement, dans GNU Octave, une alternative open source à Matlab.
Concernant la DLL, quand tu écris:
double SAMSOFT_MATHSDLL_API ss_addition(double a, double b) { return a+b; }
le code produit sera a peu près entre 3 (pour un compilateur décent sur un vieux processeur non pipeliné) et 30 fois plus lent (compilateur de merde, processeur moderne avec un pipeline long et un gros cache L1) qu'un simple "a+b" dans le code client. Si tu veux vraiment des noms user-friendly pour tes fonctions, fais-en plutôt des fonctions inline dans une bibliothèque statique.
En ce qui concerne ton implémentation du GCD:
- le calculer sur des doubles n'a pas d'intérêt
- les comparaisons == et != sont hasardeuses sur des doubles
a cause des erreurs d'arrondi, et ne doivent pas être utilisées.
- ton code fait une boucle infinie si un des opérandes est négatif
- tu utilises l'algorithme d'euclide original, qui peut être amélioré trivialement en utilisant le modulo:
//GCD(a,b) : a>0 , b>0 if (a < b) { c = a a = b b = c } for(;;) { c = a % b if (c < 1) break; a = b; b = c; } //GCD = b
Hors ligne
Merci énromément pour ces indications, mais j'aurais tant voulu que ce soit sur mon forum, pour avoir une petite communauté .
Hors ligne
Par principe, essaie de toujours travailler en anglais, que se sois au niveau des noms que tu utilises, que des commentaires. Surtout si tu veux ouvrir ton travail au plus grand nombre.. Et PI est déjà déclaré dans le math.h.. comme bien d'autres constantes d'ailleurs.. sauf erreur c'est M_PI.
Hors ligne
Merci, mêmesi je suis assez bon en anglais pour mon âge (15 ans), je travail en ce moment avec une communauté de 10 membres tous français, bien entendu ceux de 20 ans et plus parle français mais pas le reste, de toutes facons, la doc va etre traduite en anglais plus tard
Hors ligne
Salut,
@BOFH :
if (a < b) { c = a a = b b = c }
D'après moi il est inutile de de faire ce bout de code, car si b>a le programme tourne tout de même, les valeurs de a et b sont permutées automatiquement dans la boucle for.
Au fait, pourquoi un for et pas un while?
A+.
Hors ligne
Oui, c'est vrai en fait, y'a pas besoin de ce bloc. J'ai écrit ça a l'arrache ^^
for( ; ; ), c'est un idiome courant qui produit exactement le même code que while(1), mais qui s'écrit en une lettre de moins, et en plus c'est joli, c'est tout.
Hors ligne
Je préfère While(variable), je trouve que c'est plus parlant (tant que c'est mieux que pour), simple avis !
Hors ligne
Salut,
@BOFH : merci pour les réponses, effectivement ça fait une lettre de moins.
A+.
Hors ligne
Une lettre de moins mais une incompréhension en plus, while est plus parlant que for( ; ; )
Hors ligne
Oui c'est vrai mais c'est pas logique que ; ; = 1 , je ne touve pas cela fluide, while(1) ca parle de lui même (tant que c'est toujours 1) alors que for( ;; ) (pour ???) , mais bon vous faîtes comme vous voulez, c'est mon simple avis lol !
Hors ligne
quand on écrit
for(a; b; c) { code }
le compilateur traduit en
a; while(b) { code; c; }
donc
for(;;)
traduit littéralement en
while() { code }
, avec la seule particularité que le vide dans la condition commande une boucle infinie (alors qu'un while avec rien dans la condition n'est pas valide en C)
Hors ligne
C'est sûrement vrai ce que vous dîtes (car je n'ai jamais appris à travailler avec for ( ;; ) ) mais vous vous réfutez vous même, d'une part vous dîtes que le compilateur traduit for ( ;; ) en while, si il le fait c'est que c'est meilleur et faire while directement ferait gagner des secondes lors de la compilation d'autre part, le compilateur ne traduit pas un langage simplifié (exemple langage C) en un autre langage simplifié mais il fait la conversion langage simplifié -> binaire !
Hors ligne
Mhh... raisonnement intéressant, mais pas tout a fait correct.
Pour commencer, le compilateur C ne traduit pas directement le code C en code binaire. Prenons le cas de gcc par exempe.
Il y a d'abord une phase de pré-traitement, qui gère les macros #. Ensuite, le compilateur transforme le code C en une représentation interne en forme d'arbre, l'arbre de syntaxe abstrait. C'est au cours de cette transformation que la syntaxe est vérifiée, et qu'a lieu la résolution des symboles.
Lorsque l'arbre est complet, le compilateur effectue ensuite la vérification des types. Lorsque la vérification des types est finie, cet arbre subit une passe d'optimisations, et est traduit dans une deuxième représentation interne plus fine, le langage de transfert de registres.
Une deuxième passe d'optimisations s'occupe du renommage de registres et des problèmes de pipelining. Ensuite, du code en langage d'assemblage est produite à partir de ça, et le compilateur s'arrête.
Entre alors en jeu l'assembleur, qui va transformer le langage d'assemblage en code objet, qui est un morceau de code binaire partiel (que l'on retrouve entre autre dans les librairies). Finalement, tous les fragments de code objet sont assemblés par l'éditeur de liens, qui va produire au final un binaire exécutable.
Tout ca pour dire, que le compilateur ne traduit pas *textuellement* le for( ;; ) en while(1), mais qu'il produit des arbres syntaxiques similaires. Evidemment, dans tout ce travail, les tâches peinibles sont l'optimisation, l'attribution des registres, la résolution des symboles et
la vérification des types; le temps gagné en remplaçant for par while sera de manière générale négligeable par rapport au reste de la compilation.
En fait, on pourrait même argumenter que le for( ;; ) est plus simple a produire pour le compilateur, parce qu'il peut être directement traduit en une boucle infinie, alors que dans le cas du while(1), le compilateur doit examiner le contenu de la condition (le 1) pour réaliser qu'elle est constante et que le test sera toujours vrai. Toujours de manière générale, plus le code source est abstrait, meilleur sera le code généré, parce qu'il est toujours plus facile pour une machine de transformer une représentation abstraite en quelque chose de plus concret, que le contraire.
Hors ligne
Salut,
@BOFH : merci pour ces précisions. Est-ce que tu aurais une source pour que je puisses creuser le sujet?
A+.
Hors ligne
Hello Jean,
tu peux jeter un oeil à ce cours de compilation made in switzerland:
http://lamp.epfl.ch/teaching/archive/co … ments.html
Hors ligne
Salut,
Merci, je suis déjà en train de creuser avec ma pelle.
A+.
Dernière modification par jean@adimp.ch (03 Mar 2007 20:26:11)
Hors ligne
C'est vrai qu'il y a cette histoire de pré-compilatio n(avec les macros...), mais comme fais for ( ;; ) pour faire quelque chose comme while (n == 0) ?
Hors ligne
Ah, tu as mal du comprendre; le for( ;; ) ne remplace pas le while en général, c'est seulement pour faire une boucle infinie, qu'on fait aussi avec while(1). Si tu as seulement une condition en début/fin de boucle, le while est plus adapté.
Hors ligne
A ok, donc le for( ;; ) ne sert qu'a une chose ?
Hors ligne
Salut,
Ce document qui donne une bonne idée des progrès des compilateurs:
http://www.onversity.net/cgi-bin/progac … P=00000457
A+.
Hors ligne