gpt4 book ai didi

c - 为什么这会返回 Floats 的正确值而不是 double 值?

转载 作者:太空宇宙 更新时间:2023-11-04 07:30:22 24 4
gpt4 key购买 nike

float Raise2power(double base, int exponent){
if(exponent==0){
return 1;
}
else {
while (--exponent){
base*=base;
}
return base;
}
}

我将返回类型更改为 float,此代码有效,但在返回垃圾之前它是 double。

最佳答案

问题一定出在您没有向我们展示的某些代码中。

首先,这不是幂函数。你在反复平方 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 Raise2powerdouble 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 ,这又会产生垃圾。但是你应该为 float 得到垃圾或 double .

避免这种问题的方法是在头文件中声明函数,并且#include该 header 都在 .c 中定义函数的文件(以便编译器可以检查一致性)以及包含函数调用的任何源文件。

但同样,这只是猜测,因为您从未向我们提供足够的信息来诊断问题。

推荐阅读:http://sscce.org/

关于c - 为什么这会返回 Floats 的正确值而不是 double 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14419236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com