2011-09-06 165 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函數。