2012-10-15 81 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