float Raise2power(double base, int exponent){
if(exponent==0){
return 1;
}
else {
while (--exponent){
base*=base;
}
return base;
}
}
我将返回类型更改为float,这段代码可以工作,但是在返回垃圾之前它是双倍的。
问题一定出在您没有向我们展示的某些代码中。
首先,这不是幂函数。你反复平方 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
向我们展示一个完整的程序及其输出。
更新:在评论中,你说你已经修复了这个错误并且它现在正在工作。我怀疑这两件事是无关的;您向我们展示的代码中的任何内容都不应该产生垃圾值——除非您在其他地方做错了什么。
我最好的猜测是您已将函数定义为float
在一个地方返回,但将其声明为返回double
在另一个地方返回,反之亦然。编译器在看到调用时会假设结果是一种类型,而实际上它是另一种类型。
要么是这样,要么你在没有可见声明的情况下调用了该函数。对于 C99 之前的编译器(例如 Microsoft 的),编译器将假定返回类型为int
,这又会产生垃圾。但是你应该得到垃圾 forfloat
或 for double
。
避免这种问题的方法是在头文件中声明函数,并且#include
在.c
定义函数的文件(以便编译器可以检查一致性)和包含对该函数的调用的任何源文件中都声明该头文件.
但同样,这只是猜测,因为您从未向我们提供足够的信息来诊断问题。
推荐阅读:http ://sscce.org/