nodgim a écrit:Programme d'un autre intervenant ( je ne garantis pas son exactitude ) et quelques résultats:
double sucre(long sucres) {
long halves = sucres<<1;
halves ++;
double *prob = malloc(halves * sizeof(double) << 1);
for(int i=0; i< halves; i++) prob[i] = prob[halves + i] = 0;
int current = 0;
int previous = halves;
prob[0] = 1;
for(int total = halves - 2; total >= 2; total--) {
current = previous;
previous = halves - previous;
prob[current] = prob[previous+1] * 2 / (total + 2);
for(int i=1; i<= total; i++) prob[current+i] =
prob[previous+i+1] * 2 * (i+1) /(total + 2 + i) +
prob[previous+i-1] * (total - i + 2) / (total + i);
}
double res = prob[current+2];
free(prob);
return res;
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double sucre(long sucres);
double fastPow(double a, long b);
int main(int argc, char** argv) {
double i = 10;
for(int j = 1; j < 16; j++, i*=10)
printf("10^%d: %f\n", j, sucre(i));
}
double fastPow(double a, long b) {
double res = 1;
double c = a;
for(long i = b; i; i>>=1) {
if(i&1) res *= c;
c *= c;
}
return res;
}
double sucre(long sucres) {
double res = 0;
double limit = 10000;
double step = 0.001;
for(double i=0; i<limit; i += step) {
res += exp(-i) * fastPow(1 - (1+i)*exp(-i), sucres-1);
}
return 1 - res * sucres * step;
}
scarta a écrit:En gros, j'ai un tableau de taille 4N+2, la première moitié me sert à stocker l'état courant (2N+1 possibilités pour des demis sucres), et la seconde me sert à stocker l'état suivant. Je bascule de l'une à l'autre en alternant la "première" et la "seconde" moitié..
next[col] += probaP * cur[col];
next[col + 1] += probaQ * cur[col];
//on swappe les lignes
{
double* tmp = cur;
cur = next;
next = tmp;
}
scarta a écrit:Enfin ceci dit, Doraki a donné la formule au tout début (chapeau c'est bien vu !) donc ne vous attendez pas à un miracle la réponse sera 94,185%
un gars qui libère la mémoire allouée avant de sortir de de son programme, ne peut pas être foncièrement mauvaisscarta a écrit: double res = prob[current+2];
free(prob);
return res;
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 16 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :