3

ユーザーからの入力を float 値として受け入れています。

この値は、「10 の 18 乗」まで上げることができます。

次のステップでは、この数のすべての約数を見つけます。私は次のことをやっています:

      for(i=2; i<=n/2 ; i++)
      {
        if(n%i==0) 
           v.push_back(i);
      }

ここで、n はユーザーが入力した数値です。

問題は、n が float であり、if ループ インデックスでそれを使用すると、値が '10 の 9 乗' に制限されることです。

したがって、「10 の 18 乗」の範囲の値を使用するために int 以外のデータ型を使用する方法はありますか?

4

4 に答える 4

3

unsigned long long2 64またはおよそ 10 19の を使用できます

これは、コンパイラが 64 ビット整数をサポートしていることを前提としています。

于 2012-04-27T07:11:49.500 に答える
2

質問には回答しましたが(long long intを使用)、フロートは理由から「浮動小数点」と呼ばれることを指摘したいと思います。それらは、仮数の精度を決定する指数、基本的には小数点の位置を組み込んでいます。これにより、小さい数値を高精度で表現し、大きな数値を低精度で表現できますが、両方を同時に表現することはできませ

詳細については、http://en.wikipedia.org/wiki/IEEE_754-2008をご覧ください。

これを試して:

int main(void)
{
    float i = 16777217.0f;
    printf("i = %f\n", i);
    i++;
    printf("i+1 = %f\n", i);
}

32ビットフロートを使用すると、次のようになります。

i = 16777216.000000
i+1 = 16777216.000000

今日の質問:このようなループがあるとどうなると思いますか?

for(float f; f < 20000000; ++f) 
{
    // do stuff
}
于 2012-04-28T04:24:01.820 に答える
0

ロングダブルは充実していると思います。

于 2012-04-27T07:14:08.437 に答える
0

loop に他のデータ型を使用できることを確認してください。 ここで言及されている型のいずれかを使用してください

于 2012-04-27T07:23:20.423 に答える