问题描述
当我使用以下代码时,我试图复制这样的想法:sqrt(x)
等于X^(1/2)
pow(x,(1/2);
无论我输入什么值,它都返回1。我已经使用sqrt函数解决了此问题,但想知道为什么将来会发生这种情况。
解决方法
在最初的形式中,1/2
是整数除法,其结果为0
。
数学101:任何加0的结果都是1。
, 1
(整数文字)除以2
(整数文字)会要求整数除法(在运算符/
上),结果为{{1 }}。从那时起,您将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
用于求平方根:
pru.c
sqrt(3)
执行该代码将给出:
#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",pow(x,1.0/2.0));
return 0;
}
,
整数除法产生整数结果,因此1/2
产生0
,而不是0.5
。要获得浮点结果,至少一个操作数必须是浮点值,例如1 / 2.0
。尽管您可以只写0.5
并保存胃灼热。
1/2为0,因为它们都是整数。您可以使用1.0 / 2.0或0.5进行所需的操作。