在 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?的主要内容,如果未能解决你的问题,请参考以下文章