在C中,当电源设置为1/2时,为什么电源功能返回1?
当我使用下面的代码时,我试图复制这样一种想法,即某物的在C中,当电源设置为1/2时,为什么电源功能返回1?,c,syntax,integer-division,C,Syntax,Integer Division,当我使用下面的代码时,我试图复制这样一种想法,即某物的sqrt(x)等于x^(1/2) 无论我输入什么值,它都返回1。我已经用sqrt函数解决了这个问题,但想知道为什么将来会发生这种情况。在它的原始形式中,1/2是整数除法,产生的结果是0 数学101:任何提升0的值都是1。整数除法产生整数结果,因此1/2产生0,而不是0.5。至少有一个操作数必须是浮点值才能获得浮点结果,例如1/2.0。虽然您可以只写0.5并保存胃灼热。1(整型文字)除以2(整型文字)要求整数除法(在运算符/上),结果是0。从那
sqrt(x)
等于x^(1/2)
无论我输入什么值,它都返回1。我已经用sqrt函数解决了这个问题,但想知道为什么将来会发生这种情况。在它的原始形式中,
1/2
是整数除法,产生的结果是0
数学101:任何提升0的值都是1。整数除法产生整数结果,因此
1/2
产生0
,而不是0.5
。至少有一个操作数必须是浮点值才能获得浮点结果,例如1/2.0
。虽然您可以只写0.5
并保存胃灼热。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)
在同一个库中进行平方根运算:
普鲁士
C++中的P>1/2是0,因为两者都是整数。你可以使用1.0/2.0或0.5来做你想做的事。
pow(x,(1/2);
是一个语法错误。请注意sqrt(x)
可能比pow(x,0.5)
x*x肯定比pow(x,2)
pow(x,(1/2)
pow(x,0.5)
好的,这是有道理的。谢谢你的帮助。虽然这个问题的解释是有效的。关于OP的意图,建议像1.0f/2
(导致0.5
)这样的浮点除法来解决这个问题会有帮助吗?
pow(x, (1.0/2.0)); /* there's a closing parenthesis missing in your sample code */
#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
$ _