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;
        }
    }

我应该怎么办??

4

1 回答 1

3

当您将(相对)较小的数字添加到(相对)大的数字时,浮点加法不起作用。这是由float 存储在 memory 中的方式引起的。

您可以尝试用双精度浮点( ) 表示替换单精度浮点( float),但如果这不起作用,您可能需要像这样实现 hack:double

// 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溢出的替换。尝试谷歌定点 int C(一些结果:1 , 2)以更好地了解该做什么。

于 2012-10-15T11:28:33.453 回答