2011-09-06 80 views
0

我已经按照对二次方程转换为整数

#include <iostream> 
#include <math.h> 
using namespace std; 
int main(){ 
    float x,x1; 
    x=0;x1=0; 
    int a=1; 
    int b; 
    int c; 
    cout<<"enter the second term:"<<endl; 
    cin>>b; 
    cout<<"enter the third term:"; 
    cin>>c; 
    float d=b^2-4*a*c; 
     if (d<0){ 

      cout<<"the equation has not real solution :"<<endl; 
       } 


     else if (d==0) { x=(-b/2); x1=x;} 
     else 
     { 
      x=(-b+sqrt(d))/2;x1=(-b-sqrt(d))/2; 


     } 
     cout<<"roots are :"<<x<< " "<<x1<< " "<<endl; 



    return 0; 
} 

的计算根simpled算法,但它给我警告

arning C4244: '=' : conversion from 'int' to 'float', possible loss of data 

,当我进入-6和9它给出了根是6和零当然是不正确的请帮助我

+0

处理你的变量名!什么是X? X1?一个? B' C? d?哦。我的。神。此外,正确的缩进。那里有什么空行? –

+2

@Konrad Rudolph,我会说在这种情况下,它是可以的,因为它显然是按照惯例使用这些字母的二次公式 –

+1

@Konrad它们是二次方程中的变量。 –

回答

6

^是按位异或运算符,而不是权力,因为你可能认为。要将号码提高到任意功率,请使用std::pow(来自标准标头cmath)。对于两个幂,你可以使用x * x

+0

uii我看到我忘了谢谢@Konrad Rudolph –

3

b^2表示使用XOR运算符,我不认为这是您的意思。尝试使用b * b。另外,将a,b和c声明为浮动而不是整数可能会有所帮助。

2

除了在XOR运算

你不能做对INT所有的计算,然后将它转换为float正确的言论。这样div的结果是四舍五入的。尝试在计算过程中抛出b(float)b。或者将所有a,b,c和d定义为浮点数

+1

这不会对你的想法有帮助。极大的整数不能用浮点数精确表示(32位整数 - > 23位小数表示精度下降)。最好只使用双。 – riwalk

1

^是一个按位异或运算符,即编译器为什么给出warning.Try使用math.h头文件中声明的pow函数。