浮点值问题

float value issue

本文关键字:问题      更新时间:2023-10-16

我在使用浮点数时遇到问题

循环中,其值停留在 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;
        }
    }

我该怎么办??

当您将

(相对)小数字添加到(相对)大的数字时,浮点添加不起作用。这是由浮点数存储在内存中的方式引起的。

您可以尝试用双精度浮点数(

double)表示形式替换单精度浮点数(float),但如果这不起作用,您可能需要实现这样的hack:

// 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)以获得更好的想法该怎么做。