Petit problème en C

Résolu
mega -  
 mega -
Bonjour,

int i=1;
double b=(2*i)/((2*i)+1);
cout<<b;

Petit problème en c++
pourquoi ca affiche b=0 :s ?

Merci à tous

2 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    i est un entier, donc (2*i)/((2*i)+1) est calculé comme un entier. Ici 2/3=0
    Ce n'est qu'une fois calculé qu'on donne la valeur 0 à b.

    Pour que ça marche, tu dois caster le calcul en type flottant :

    double b = (double) (2*i)/(2*i+1);
    0
    1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      heu... pas sur que ça marche.
      je tenterai plutôt :
      b=(2.0*i)/((2.0*i)+1.0)
      qui fait une transformation implicite de int vers double.
      0
  2. mega
     
    Merci de m'avoir répondu j'ai remplacé int i par double i et mon programme d'arc tangente fonctionne sauf le calcul de PI...^^

    #include <iostream>

    using namespace std;

    double eps=10e-8;

    double arctg (double x)
    {
    double i=1;
    double result=1,terme1=1,terme2=1,terme3=1,a=(x*x)/(1+(x*x)),b;
    do
    {
    b=(2*i)/((2*i)+1);
    terme2=b*terme2;
    terme1=a*terme1;
    terme3=terme1*terme2;
    result=result+terme3;
    i++;
    }while(terme3>=eps);
    result=result*(a/x);
    return result;
    }
    int main()
    {

    double x;
    cin>> x;
    cout<<arctg(x)<<endl;
    cout<<"Pi "<< 4*((4*arctg(1/5))-(arctg(1/239)))<<endl;
    return 0;
    }
    0
    1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      "i++" sur un double ? je ne dit pas que c'est faux, mais j'ai un gros doute.
      i+=1. et tu seras sur.
      Sinon, pi c'est 4*arctg(1.)
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Et puis c'est quoi ta méthode de calcul ?
      Pour des développements limités tu devrais avoir une alternance de signe :
      Arctan (x) = x - x^3/3 + ... + (-1)^n x^(2n+1)/(2n+1) + o(x2n+1)
      0
    3. mega
       
      oui en efet pi c'est 4*arctg(1.) mais c'est aussi 4*((4*arctg(1/5))-(arctg(1/239))) et c'est de la deuxième manière qu on me demande de l'avoir.
      J'avoue que c'est un peu lourd d'avoir un double qui croit au lieu d'un int , alors chez moi ++i et i=i+1 c'est pareil ca ne change rien
      0
    4. mega
       
      non j'ai pas besoin de signe car l'aproximation est : arctg x=(x/(1+x^2))*somme(i---> infini) de ci*((x^2/(1+x^2)^i où ci= terme2 (regardez en haut ^^) et le terme à ajouter est >0.
      0
    5. KX Messages postés 19031 Statut Modérateur 3 020
       
      Si tu prends x=1 par exemple, x²/(1+x²)^i =1/2^i or la somme infinie des 1/2^i = 1 ou 2 selon si tu commences tes indices i à 0 ou 1... Donc arctan(1)=0.5 ou 1 !!!

      Vérifies ta formule, même si c'est une approximation tu as visiblement un problème...
      0