6

Cで関数を使用しておりpow、戻り値を整数型で格納しています。以下のコードスニペットを参照してください。

for (i = 0; i < 5; i++){
    val = (int)pow(5, i);
    printf("%d, ", val);
}

ここival、、は整数であり、出力は1, 5, 24, 124, 624です。これは、float25が24.99999...として扱われるためだと思います。これは、整数への割り当て時に24に切り捨てられます。

戻り値をintに格納する必要がある場合、どうすればこれを渡すことができますか?

4

4 に答える 4

9

0.5にキャストする前に追加しintます。システムがそれをサポートしている場合は、C99round()関数を呼び出すことができますが、移植性の理由からそれを避けたいと思います。

于 2011-10-29T06:04:57.057 に答える
6

交換

val = (int)pow(5, i);

double d = pow(5,i);
val = (int)((d > 0.0) ? floor(d + 0.5) : ceil(d - 0.5));
于 2011-10-29T07:10:44.023 に答える
4

自分で捕虜を実装します。

int myPow(int base, int exponent) {
    int n = 1;
    for (int i = 0; i < exponent; i++) {
        n *= base;
    }
    return n;
}

もちろん、これは正の指数のみを処理し、intでのみ機能します。これを行うには、確かにより効率的な方法があります。たとえば、Haskellののソースを^参照してください。

于 2011-10-29T06:13:46.243 に答える
-3

私はこの問題を自分で抱えていました。私はあなたの指示でそれを簡単に解決しました。単にifステートメントを追加するだけです。

if (k%n>0)
{
    k=k+1;
}
于 2013-11-23T20:40:16.257 に答える