Swisslinux.org

− Le carrefour GNU/Linux en Suisse −

 

Langue

 

Le Forum

Vous n'êtes pas identifié.

#1 27 Feb 2007 02:16:30

SamSoft
Citoyen(ne)
 
Date d'inscription: 27 Feb 2007
Messages: 11

Dll mathématiques pour GNU/Linux

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

http://static.swisslinux.org/images/bandeaux/erreur.png
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

 

#2 27 Feb 2007 14:34:46

SamSoft
Citoyen(ne)
 
Date d'inscription: 27 Feb 2007
Messages: 11

Re: Dll mathématiques pour GNU/Linux

citez moi une seul règle qui me dise que je ne suis pas dans mon droit !

Hors ligne

 

#3 27 Feb 2007 15:15:37

Eggman
Admin
Lieu: Grand-Lancy(GE)
Date d'inscription: 17 Nov 2004
Messages: 1133
Site web

Re: Dll mathématiques pour GNU/Linux

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... wink


"It always takes longer than you expect, even when you take into account Hofstadter's Law."
Douglas Hofstadter, Gödel, Escher, Bach: An Eternal Golden Braid

Hors ligne

 

#4 27 Feb 2007 15:27:34

SamSoft
Citoyen(ne)
 
Date d'inscription: 27 Feb 2007
Messages: 11

Re: Dll mathématiques pour GNU/Linux

Petite bise big_smile (lol, ok j'avais mal compris, il aurait pu simplement écrire "Vous vous êtes trompé de partie de forum, je déplace roll"), lol, c'est oublié ? "De quoi je parlais déjà wink "!

Hors ligne

 

#5 27 Feb 2007 17:00:00

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: Dll mathématiques pour GNU/Linux

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:

Code:

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:

Code:

//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

 

#6 27 Feb 2007 19:39:01

SamSoft
Citoyen(ne)
 
Date d'inscription: 27 Feb 2007
Messages: 11

Re: Dll mathématiques pour GNU/Linux

Merci énromément pour ces indications, mais j'aurais tant voulu que ce soit sur mon forum, pour avoir une petite communauté wink.

Hors ligne

 

#7 28 Feb 2007 22:32:51

[GO]Skywalker13
Modérateur
Lieu: Choëx (VS)
Date d'inscription: 05 Oct 2004
Messages: 896
Site web

Re: Dll mathématiques pour GNU/Linux

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.


Mathieu SCHROETER
log.schroetersa.ch

Hors ligne

 

#8 01 Mar 2007 14:12:07

SamSoft
Citoyen(ne)
 
Date d'inscription: 27 Feb 2007
Messages: 11

Re: Dll mathématiques pour GNU/Linux

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

 

#9 01 Mar 2007 15:36:45

jean@adimp.ch
Illuminé(e)
Lieu: Marly
Date d'inscription: 10 Mar 2005
Messages: 1228
Site web

Re: Dll mathématiques pour GNU/Linux

Salut,
  @BOFH :

Code:

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+.


--------------------------------------------------------
Jean Tinguely Awais
Ma vie sur twitter : http://www.twitter.com/tservi

Hors ligne

 

#10 01 Mar 2007 15:53:55

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: Dll mathématiques pour GNU/Linux

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

 

#11 01 Mar 2007 19:16:11

SamSoft
Citoyen(ne)
 
Date d'inscription: 27 Feb 2007
Messages: 11

Re: Dll mathématiques pour GNU/Linux

Je préfère While(variable), je trouve que c'est plus parlant (tant que c'est mieux que pour), simple avis !

Hors ligne

 

#12 02 Mar 2007 08:03:42

jean@adimp.ch
Illuminé(e)
Lieu: Marly
Date d'inscription: 10 Mar 2005
Messages: 1228
Site web

Re: Dll mathématiques pour GNU/Linux

Salut,
@BOFH : merci pour les réponses, effectivement ça fait une lettre de moins.
A+.


--------------------------------------------------------
Jean Tinguely Awais
Ma vie sur twitter : http://www.twitter.com/tservi

Hors ligne

 

#13 02 Mar 2007 15:25:57

SamSoft
Citoyen(ne)
 
Date d'inscription: 27 Feb 2007
Messages: 11

Re: Dll mathématiques pour GNU/Linux

Une lettre de moins mais une incompréhension en plus, while est plus parlant que for( ; ; )

Hors ligne

 

#14 02 Mar 2007 23:58:15

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: Dll mathématiques pour GNU/Linux

Plus parlant ? pourquoi ?

Une fois que tu l'as vu une fois, tu sais que for( ;; ) est pareil que while(1), c'est tout...

Hors ligne

 

#15 03 Mar 2007 11:18:16

SamSoft
Citoyen(ne)
 
Date d'inscription: 27 Feb 2007
Messages: 11

Re: Dll mathématiques pour GNU/Linux

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

 

#16 03 Mar 2007 12:39:58

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: Dll mathématiques pour GNU/Linux

quand on écrit

Code:

for(a; b; c) { code }

le compilateur traduit en

Code:

a;
while(b) {
  code;
  c;
}

donc

Code:

for(;;)

traduit littéralement en

Code:

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

 

#17 03 Mar 2007 13:51:15

SamSoft
Citoyen(ne)
 
Date d'inscription: 27 Feb 2007
Messages: 11

Re: Dll mathématiques pour GNU/Linux

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 ! smile

Hors ligne

 

#18 03 Mar 2007 14:24:24

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: Dll mathématiques pour GNU/Linux

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

 

#19 03 Mar 2007 16:35:42

jean@adimp.ch
Illuminé(e)
Lieu: Marly
Date d'inscription: 10 Mar 2005
Messages: 1228
Site web

Re: Dll mathématiques pour GNU/Linux

Salut,
@BOFH : merci pour ces précisions. Est-ce que tu aurais une source pour que je puisses creuser le sujet?
A+.


--------------------------------------------------------
Jean Tinguely Awais
Ma vie sur twitter : http://www.twitter.com/tservi

Hors ligne

 

#20 03 Mar 2007 18:54:40

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: Dll mathématiques pour GNU/Linux

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

 

#21 03 Mar 2007 20:25:51

jean@adimp.ch
Illuminé(e)
Lieu: Marly
Date d'inscription: 10 Mar 2005
Messages: 1228
Site web

Re: Dll mathématiques pour GNU/Linux

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)


--------------------------------------------------------
Jean Tinguely Awais
Ma vie sur twitter : http://www.twitter.com/tservi

Hors ligne

 

#22 03 Mar 2007 21:41:12

SamSoft
Citoyen(ne)
 
Date d'inscription: 27 Feb 2007
Messages: 11

Re: Dll mathématiques pour GNU/Linux

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

 

#23 03 Mar 2007 22:56:25

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: Dll mathématiques pour GNU/Linux

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

 

#24 03 Mar 2007 23:01:10

SamSoft
Citoyen(ne)
 
Date d'inscription: 27 Feb 2007
Messages: 11

Re: Dll mathématiques pour GNU/Linux

A ok, donc le for( ;; ) ne sert qu'a une chose ?

Hors ligne

 

#25 05 Mar 2007 13:29:22

jean@adimp.ch
Illuminé(e)
Lieu: Marly
Date d'inscription: 10 Mar 2005
Messages: 1228
Site web

Re: Dll mathématiques pour GNU/Linux

Salut,
  Ce document qui donne une bonne idée des progrès des compilateurs:
http://www.onversity.net/cgi-bin/progac … P=00000457

A+.


--------------------------------------------------------
Jean Tinguely Awais
Ma vie sur twitter : http://www.twitter.com/tservi

Hors ligne

 

Pied de page des forums

Powered by FluxBB