Bonjour,

Je suis surpris d'une erreur d'addition dans le programme C ci dessous.

Le but du programme est de trouver le nombre de fibonnaci tel que F(x) mod 2^32 == 0.

Mon problème vient d'une addition de float particulière...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
35 => 9227465 : mod = 9227465.0
36 => 14930352 : mod = 14930352.0
37 => 24157816 : mod = 24157816.0
normalement a la position 37 nous devrions avoir 24157817.

voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main (void)
{
    float f,x;
    float f1,f2;
    int stop = 0;
    float ans = pow(2,32);
    f1 = 0;
    f2 = 1;
    for(x=37;stop!=1;x++)
    {
        f = f1+f2;
        if (fmod(f,ans) == 0)
            stop =1;
 
        printf("%.0f => %.0f : mod = %.01f\n",x,f, fmod(f,ans));
        f2 = f1;
        f1 = f;
    }
    return 0;
 
}