Petit problème en C

Résolu/Fermé
mega - 12 juin 2011 à 21:31
 mega - 12 juin 2011 à 22:52
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

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
12 juin 2011 à 21:36
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
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
12 juin 2011 à 21:41
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
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
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
12 juin 2011 à 21:51
"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
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
12 juin 2011 à 21:52
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
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
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
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
12 juin 2011 à 22:15
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