問題は、表示されていないコードにあるに違いありません。
まず、それは累乗関数ではありません。あなたは繰り返し二乗 base
しています。
あなたの機能を小さな完全なプログラムに組み込むとき:
#include <stdio.h>
float Raise2power(double base, int exponent){
if(exponent==0){
return 1;
}
else {
while (--exponent){
base*=base;
}
return base;
}
}
int main(void) {
int i;
for (i = 0; i <= 5; i ++) {
printf("Raise2power(10.0, %d) = %.1f\n", i, Raise2power(10.0, i));
}
return 0;
}
私はこの出力を得る:
Raise2power(10.0, 0) = 1.0
Raise2power(10.0, 1) = 10.0
Raise2power(10.0, 2) = 100.0
Raise2power(10.0, 3) = 10000.0
Raise2power(10.0, 4) = 100000000.0
Raise2power(10.0, 5) = 10000000272564224.0
に変更float Raise2power
するとdouble Raise2power
、次の出力が得られます。
Raise2power(10.0, 0) = 1.0
Raise2power(10.0, 1) = 10.0
Raise2power(10.0, 2) = 100.0
Raise2power(10.0, 3) = 10000.0
Raise2power(10.0, 4) = 100000000.0
Raise2power(10.0, 5) = 10000000000000000.0
完全なプログラムとその出力を示してください。
更新:コメントで、バグを修正し、現在は機能していると述べています。これら 2 つのことは無関係だと思います。あなたが私たちに示したコードでは、ガベージ値を生成するべきではありません-どこかで何か間違ったことをしていない限り.
私の最善の推測は、ある場所で戻るように関数を定義したが、別の場所で戻ると宣言したか、またはその逆であるということです。コンパイラは、呼び出しを確認すると、結果が 1 つの型であると想定しますが、実際には別の型です。float
double
それか、目に見える宣言なしで関数を呼び出しました。C99 より前のコンパイラ (Microsoft など) の場合、コンパイラは戻り値の型が であると想定しますがint
、これもガベージを生成します。float
しかし、その後、 forまたは for のいずれかでガベージを取得する必要がありますdouble
。
この種の問題を回避する方法は、ヘッダー ファイルで関数を宣言すること#include
です。そのヘッダー.c
は、関数を定義するファイル (コンパイラが一貫性をチェックできるようにするため) と、関数の呼び出しを含むソース ファイルの両方で宣言します。 .
ただし、問題を診断するのに十分な情報が提供されていないため、これは推測にすぎません。
推奨読書: http://sscce.org/