0

Euler プロジェクトの問題 5 でこれを実行しましたが、何らかの理由で浮動小数点例外が発生します。

#include <iostream>
using namespace std;

int main ()
{
    long num;
    bool isnum = false;
    long i = 20;

    while (isnum == false)
    {
        for (int j = 0; j <= 20; j++)
        {
            if (i % j != 0)
            {
                break;
            }
            else
            {
                num = i;
                isnum = true;
            }
        }
        i+=20;
    }
    cout << num << endl;
    return 0;
}

私が理解していないのは、非整数を出力するコードで何もしないときに浮動小数点例外が発生する可能性があることです。

4

3 に答える 3

8

i%j

jは0に初期化されるため、ここではゼロによる除算があります。

于 2012-08-27T09:14:35.103 に答える
3

i % jゼロに初期化して使用するためj、5.6 [expr.mul] パラグラフ 4 によると、未定義の動作が発生します。

... / または % の 2 番目のオペランドがゼロの場合、動作は未定義です。...

これにより、たとえば、浮動小数点例外が発生する可能性があります。もっと厄介なことを起こすこともできます。

于 2012-08-27T09:18:15.503 に答える
1

ループi % jの最初の反復でj==0を使用しています。for

したがって、浮動小数点の例外です。

于 2012-08-27T09:14:59.003 に答える