Soumis par trax le mar, 22/09/2009 - 15:20
Suite à un cours de math je me suis qu'il pourrait être intéressant d'implémenter un algorithme de regression linéaire histoire de mieux s'en rappeler (je suis sur qu'il existe pleins d'autres implémentations bien meilleurs). Celle-ci est volontairement non optimisée pour rester le plus lisible possible
Le code suivant charge un fichier sous la forme : "valX valY" (voir bas de page pour une code exemple). Le résultat peut être vérifié grâce gnuplot qui propose aussi une implémentation de cette algorithme.
#include <stdio.h>
#include <assert.h>
Soumis par trax le ven, 22/02/2008 - 11:44
Petit code effectuant le test de Rabbin-Miller utilisant la librairie de calcul gmp
static int rabbin(int a_, mpz_t p){
mpz_t temp;
mpz_t r;
mpz_t a;
mpz_t q;
mpz_t pm;
mpz_t i;
int moinsUn = 0;
mpz_init(temp);
mpz_init_set(r,p);
mpz_init_set(pm,p);
mpz_sub_ui(pm,pm,1);
mpz_init_set_ui(a,a_);
mpz_init_set_ui(q,0);
mpz_sub_ui(r,r,1);
do{
mpz_cdiv_q_2exp(r,r,1);
mpz_mod_ui(temp, r, 2);
mpz_add_ui(q,q,1);
}while (mpz_cmp_ui(temp,0) == 0);
/**
* Nous avons q = r2^{pp}
*/
Soumis par furet le lun, 04/02/2008 - 22:17
/**
* \file square_root.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/**
* \def EPSI est la précision recherchée
*/
#define EPSI 1.e-6
/**
* \brief Algorithme de Newton pour calculer une racine carrée.
* Utilise une boucle do while pour calculer la racine. Deux conditions de sortie de boucle :
* 1 L'erreur comise est <= à EPSI
* 2 Le nombre max d'itérations est atteind.
* NB : Aucun renseignement n'est donné quant à la condition de sortie réalisée ;
* la fonction n'indique pas si e <= EPSI en fin de boucle.
Soumis par trax le mer, 23/01/2008 - 12:04
Ce qu'il ne faut pas faire
Encore une fois, il y a la méthode > (private joke inside) qui consiste à faire une boucle du genre :
int puissance2(int puissance){
unsigned int resultat = 1;
for (int i = 0 ; i<puissance ; i++){
resultat *= 2;
}
return resultat;
}
Temps d'execution: o(puissance)
C'est moche... Pourquoi c'est moche ? Parce que le programme effectue pour calculer 2^n, n multiplication. Temps moyen par multiplication : 5 à 6 cycles d'horloges, soit n*6 ça peut faire beaucoup).
Soumis par trax le jeu, 17/01/2008 - 21:05
Calcul de nombres premiers
Petit test de primalité d'un unsigned long long int (sur x86 archi 32bits cela donne un nombre entre 0 et 18446744073709551616). Un exemple de code sera posté, utilisant la librairie gmp pour des nombres plus grands.
Nous utilisons ici la méthode dite "naïve" qui conciste à calculer les modulos successifs de tous les nombres impairs de 3 à la racine du nombre en question, après avoir testé si le nombre est divisible par 2.