2012-10-15 117 views
1

我現在面臨使用浮動浮點值問題

環路問題停留在8388608.00

int count=0; 
    long X=10; 
    cout.precision(flt::digits10); 
    cout<<"Iterration #"<<setw(15)<<"Add"<<setw(21)<<"Mult"<<endl; 
    float Start=0.0; 
    float Multiplication = Addition * N; 
    long i = 1; 
    for (i; i <= N; i++){ 
     float temp = Start + Addition; 
     Start=temp; 
     count++; 
     if(count%X==0 && count!=0) 
     { 
      X*=10; 
      cout<<i; 
      cout<<fixed<<setw(30)<<Start<<setw(20)<<fixed<<i*Addition<<endl; 
     } 
    } 

我應該怎麼做它的價值?

+1

什麼是加法定義爲?爲什麼你使用float而不是double? –

+0

它的一個任務我必須使用double和float 另外是在這個方法中傳遞的float型變量 –

+0

請嘗試提供一個[Short self contained contains example](http://sscce.org/)。例如,這裏的'N'是什麼? – Default

回答

3

Floating point addition在您將(相對)較小的數字添加到(相對)較大的數字時不起作用。這是由float is stored in memory引起的。

您可以嘗試更換single precision floating pointfloat)與double precision floating pointdouble)表示,但如果不工作,你可能需要實現這樣的黑客:

// Lets say 
double OriginalAddition = 0.123; 
int Addition = 1; 

// You just use base math substitution: 
// Addition = OriginalAddition 
int temp = Start + Addition; // You will treat transform floating point to fixed point 
           // with step 0.123, so 1 = 0.123 
// And when displaying result (transform back into original floating point): 
printf("%f", (double)result*OriginalAddition) 

這需要一番心思的找到不會導致數據丟失的替換,覆蓋所需的精度,並且不會導致int溢出。嘗試谷歌fixed point int C(一些結果:1,2)以更好地瞭解該怎麼做。

+0

所以沒有辦法解決它? –

+0

int是什麼意思? –

+0

@MudasarEllahi這是您的浮點數轉換成定點表示。請參閱其他鏈接。 – Vyktor