2

私は大きな数の素因数分解に取り組んでいます (主にproject 3 @ project Euler . long long として宣言された数値にモジュラスを使用する必要があります。その巨大な数をモジュラスしようとするたびに、浮動小数点例外が発生します。感謝します。

これを gdb で実行して、何が起こっているかを確認しました。以下は私のコードです。この時点では非常に大雑把な論理です。 私 に 問題 の 答え を 教え ない で ください. これをより良くするための助けを喜んで受け入れますが、率直な答えを私に与えないでください. ありがとう :)

long factor(long number) {
  string br = "\n\r";
  long x = 0;
  /*this modulus variable is an attempt
  to move the answer into a long long container
  to see if that solves my floating point exception,
  it didn't*/
  long long modulus;

  while(x <= number) {
    modulus = number % x;
    if(modulus == 0) {
      cout << number/x << br;
      return factor(number/x);
    }//if number % x
    else {
      return x;
    }//else
    x++;
  }//while

}//factor
4

2 に答える 2

8

0 で変更しようとしないでください。未定義です! これを行うと、ゼロ除算エラーが発生します。

long x = 0;
modulus = number % x; // x is 0 here and thus not valid

モジュロ演算に関するウィキペディアの記事に従って、私の答えを少し拡張するには

aモジュロ 0 は、大部分のシステムでは定義されていませんが、一部のシステムでは a と定義されています。

于 2011-06-12T15:46:12.007 に答える
1

Start with

long x = 1 ;

to avoid a division by zero.

于 2011-06-12T16:45:56.763 に答える