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がメモリに格納される方法が原因です。

単精度浮動小数点float)を倍精度浮動小数点( )表現に置き換えてみることが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、オーバーフローを引き起こさない置換を見つけるために多くの考慮が必要です。不動点intCいくつかの結果:1、2 )をグーグルで検索して、何をすべきかをよりよく理解してください。

于 2012-10-15T11:28:33.453 に答える