在 C 中,为啥当幂设置为 1/2 时,幂函数返回 1?

Posted

技术标签:

【中文标题】在 C 中,为啥当幂设置为 1/2 时,幂函数返回 1?【英文标题】:In C why does the power function return 1 when the power is set to 1/2?在 C 中,为什么当幂设置为 1/2 时,幂函数返回 1? 【发布时间】:2020-10-22 08:39:51 【问题描述】:

当我使用以下代码时,我试图复制 sqrt(x) of something 等于 X^(1/2) 的想法

pow(x, (1/2);

无论我输入什么值,它都会返回 1。我已经用 sqrt 函数解决了这个问题,但想知道为什么将来会发生这种情况。

【问题讨论】:

pow(x, (1/2); 是语法错误。 请注意,sqrt(x) 可能比 pow(x, 0.5) 快,x * x肯定pow(x, 2) pow(x, (1/2) -> pow(x, 0.5) 好吧,这很有道理。那你的帮助。 【参考方案1】:

在其原始形式中,1/2 是整数除法,产生的结果为 0

数学 101:任何以 0 为题的都是 1。

【讨论】:

虽然这个问题的解释是有效的。关于 OP 的意图,为了解决问题,提出像1.0f / 2(导致0.5)这样的浮点除法会有所帮助吗?【参考方案2】:

1(整数文字)除以2(整数文字)要求整数除法(在运算符/上),结果为0。从那以后,您将0 提供给一个函数pow(3),它将您的0 转换为0.0(作为该函数所需的double),这就是您正在计算的x 0.0 的幂,即1.0

你用过吗

pow(x, (1.0/2.0)); /* there's a closing parenthesis missing in your sample code */

使用浮点文字,而不是整数,除法应该是浮点数,你得到0.5 作为结果,你应该计算x 的平方根。

顺便说一句,你有一个函数sqrt(3) 来做平方根,在同一个库中:

pru.c

#include <math.h>
#include <stdio.h>

/* ... */

int main()


    double x = 625.0;

    printf("square root of %.10f is %.10f\n", x, sqrt(x));
    printf("%.10f to the power 1/2 is %.10f\n", x, pow(x, 1.0/2.0));
    return 0;


执行该代码给出:

$ make pru
cc -O2 -Wno-error  -Werror    -o pru pru.c 
$ pru
square root of 625.0000000000 is 25.0000000000
625.0000000000 to the power 1/2 is 25.0000000000
$ _

【讨论】:

【参考方案3】:

整数除法产生整数结果,因此1/2 产生0,而不是0.5。至少有一个操作数需要是浮点值才能得到浮点结果,例如1 / 2.0。虽然你可以只写0.5 并保存胃灼热。

【讨论】:

【参考方案4】:

c++ 中的 1/2 为 0,因为两者都是整数。你可以使用 1.0/2.0 或 0.5 来做你想做的事。

【讨论】:

以上是关于在 C 中,为啥当幂设置为 1/2 时,幂函数返回 1?的主要内容,如果未能解决你的问题,请参考以下文章

python3怎么取幂

递归幂函数:如果没有初始返回值,为啥会这样?

为啥 c 中的幂函数需要比预期更长的时间

为啥在返回字符串的函数上调用 c_str() 不起作用?

快速幂与矩阵快速幂

一次函数,二次函数,指数函数,对数函数,幂函数图像的增长特点