BIBLIOTHEQUE MATHEMATIQUE

D1m3x Messages postés 402 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 21 juillet 2005 - 29 sept. 2003 à 18:41
ferrant.be Messages postés 1 Date d'inscription dimanche 12 octobre 2003 Statut Membre Dernière intervention 12 octobre 2003 - 12 oct. 2003 à 02:49
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/16757-bibliotheque-mathematique

ferrant.be Messages postés 1 Date d'inscription dimanche 12 octobre 2003 Statut Membre Dernière intervention 12 octobre 2003
12 oct. 2003 à 02:49
Deux ou trois remarques par rapport à 'Nombre Premier' :o)

//Nombres Premiers
bool NombrePremier(int valeur)
{
int diviseur = 2;
int test = 0;

while(diviseur < valeur-1)
/* pour vérifier si un nombre (valeur) est premier, il n'est pas nécessaire de tester tous les diviseurs jusqu'à (valeur-1). Il suffit d'aller jusqu'au dernier entier avant la racine carrée de n.
Par exemple, pour savoir si 17 est premier, il me suffit de vérifier s'il est divisible par 2, 3, et 4.
Pas nécessaire d'aller plus loin: si 18 est divisible par 9 (qui est > que racine carrée 18), il sera nécessairement divisible par 2 (qui lui est < que racine carrée 18).
Le plus simple, pour vérifier la borne supérieure de l'intervalle de test, ce n'est pas d'utiliser la racine carrée (compliquée à calculer et gourmande en temps de calcul), mais plutôt de vérifier si
(diviseur * diviseur) < ((valeur-1) * (valeur-1))
*/
{
if(valeur % diviseur == 0) test++;
diviseur++;
/*
A part 2, il n'est pas nécessaire du tout de tester les autres chiffres pairs: si un nombre n'est pas divisible par 2, il ne le sera à fortiori par aucun autre nombre pair...
Pourquoi ne pas faire diviseur+=2 plutôt que diviseur++, cela te fera gagner un facteur 2 dans ton temps de calcul, après avoir fait le test pour 2 et veillé à ce quediviseur soit = à 3 avant d'entrer dans la boucle!.
*/
}

if(test==0) return true;
else return false;
}

/*
Une dernière remarque: tu fais une boucle while dont tu ne sors pas si test 1... Alors que si tu cherches à vérifier si 245558242 est premier, tu le sais dès le premier test (division par 2 -> test 1). Et pourtant, tu continues de vérifier, ce qui est dommage, je trouve.
Je pense qu'un while ((test==0) && (diviseur*diviseur < ((valeur-1)*(valeur-1)) ) serait plus pertinent.
*/

Tout ceci dit, bien entendu, sans vouloir du tout te froisser ;o)
Bon travail!
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
5 oct. 2003 à 16:18
Bonjour,

pythagore :
le carré de l'hypothenus est égal à la somme des carrés des opposés.
Ta fonction te renvoi le carré de l'hypothenus et non l'hypothenus.

Autre remarque :

double IdentiteRemarquable3(double a, double b)
{
double IR = a*a - b*b;
return IR;
}

peut être remplace par

double IdentiteRemarquable3(double a, double b)
{
return ((a*a) - (b*b)); // J'aime bien les parentheses.
}

Matt...
Saian87 Messages postés 2 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 3 octobre 2003
3 oct. 2003 à 18:57
ok gabuzomeuh (reference aux shadoks ?) j'y penserai, pour le moment je suis plutot sur la trigo, j'ai implemente l'algorithme CORDIC mais il me faudrait la fonction arc tangente pour que ca marche...
gabuzomeuh Messages postés 53 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 28 mars 2007
3 oct. 2003 à 01:26
pas mal mais je n'ai pas trouve ce que je cherchais c'est a dire une foncion pour calculer un exposant inverse c'est a dire par exemple:

y=x^(1/n) ou bien 16^(1/10) = 1.319507911

a+
Saian87 Messages postés 2 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 3 octobre 2003
1 oct. 2003 à 13:24
Merci tout le monde c'est normal qu'il y ait pas tout et surtout pas de trucs compliques (je suis qu'en premiere), sinon pour la trigo j'y travaille.
Et pour les puissances je savais pas comment faire.
Sinon si vous savez comment calculer une racine cubique ca serait sympa ...

Merci a tous pour l'aide que vous m'apportez
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
1 oct. 2003 à 01:52
Dans puissance et puissancedix :
Tu met un <= dans le for, ce qui te rajoute une exec de la boucle et t'oblige a rajouter une division dans le return.

si tu met juste
for(...;i<exp;..)
...
return resultat

ca suffira et ca t'economise du temps processeur

-------------------------------------------------
y'a le meme type d'erreur dans puissancedix que dans puissance

une soluce tres simple :
return nombre * Puissance(10,exposant);

mais ca c'est de la triche :-D

sinon :
Resultat=nombre;
for (int i=0;i<exposant;i++)
Resultat *= 10;
return Resultat;
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
1 oct. 2003 à 01:19
Ta fonction puissance n'est pas bonne :

for(int i = 0; i <= exposant; i++)
{
Resultat = nombre * nombre;
Resultat = Resultat * nombre;
}

>
A chaque fois tu calcule en fait Resultat = nombre * nombre *nombre;

En plus, tu ne calcule pas le cas ou exposant=0 (rend 1) ainsi que les cas ou exposant<0 qui sont en fait des racines

il aurai plutot fallu faire un truc du genre

Resultat = 1
for (int i=0;i<exposant;i++)
Resultat *=nombre;
return Resultat;

Comme ca, ca te prend au moin deja les cas ou exposant>=0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
30 sept. 2003 à 21:03
Heu pour la note 10/10, il ne faut pas ABUSER, comme meme ...
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
30 sept. 2003 à 21:01
Heu la valeur ajoutee aux fonctions est tres bof !
Surtout Les IR ! Les fonction s ne portent pas leur noms.

Mais bon ... c'est bien pour debuter, et pour apprendre comment marche le passage d'arguments a une fonction, le prototype ...
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
30 sept. 2003 à 19:12
VolumePave :-P on dit un parallélépipède rectangle ;-) enfin, vu que c pr un nom de fonction, je suppose que c t pr pas faire long :-)

sinon, ben c bien d'avoir fait ça.

Ajoutes-y des fonctions un peu marrantes comme ! (x! = 1*2*3*...*x). Et puis sans la trigo, ça peut pas remplacer math.h

Mais je t'encourage à continuer, ça te fera tjs une liste d'outils pratiques :-)
D1m3x Messages postés 402 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 21 juillet 2005 1
29 sept. 2003 à 18:41
Pas mal, quelques fonctions interessantes mais pas vraiment compliquée, tu n'as pas utilisé les façon les plus compliquée c'est ce que je trouve bien dans ton code :)
Rejoignez-nous