C 为什么‘pow(sum,1/2)’不能给我与‘sqrt(sum))相同的结果呢?
在末尾的代码中,底部有一个名为C 为什么‘pow(sum,1/2)’不能给我与‘sqrt(sum))相同的结果呢?,c,square-root,C,Square Root,在末尾的代码中,底部有一个名为general\u norm的函数,它使用以下print()函数: printf(" %f",sqrt(sum)); printf(" %f",pow(sum,1/2)); 虽然sqrt(sum))给出了正确的结果,但我不明白为什么pow(sum,1/2)不考虑√x=x½ 你能帮我找出我遗漏了什么吗?谢谢!:-) #包括 #包括 无效打印向量(整数N,浮点*V); void save_向量(int N,float*V); 无效绝对值(整数N、浮点*V、浮点*VAB
general\u norm
的函数,它使用以下print()
函数:
printf(" %f",sqrt(sum));
printf(" %f",pow(sum,1/2));
虽然sqrt(sum))
给出了正确的结果,但我不明白为什么pow(sum,1/2)
不考虑√x=x½
你能帮我找出我遗漏了什么吗?谢谢!:-)
#包括
#包括
无效打印向量(整数N,浮点*V);
void save_向量(int N,float*V);
无效绝对值(整数N、浮点*V、浮点*VABS);
无效最大值(整数N,浮点*VABS);
无效一般规范(整数N,浮点*VABS);
内部主(空)
{
常数int n=4;
int i;
浮子v[n],真空断路器[n];
puts(“输入向量的5个分量:”);
保存向量(n,v);
puts(“\n向量为:”);
打印向量(n,v);
puts(“\n绝对向量为:”);
绝对值(n、v、vabs);
puts(“\n最大值为:”);
最大_值(n,vabs);
puts(“\n通用规范为:”);
一般规范(n,vabs);
返回0;
}
无效保存向量(整数N,浮点*V)
{
int i;
对于(i=0;i刚刚离开这里,1201程序给出了我的答案:
整数数学。1/2
是0
。使用0.5
,或强制键入1.0/2.0
1.0/2
也可以。整数数学。1/2
是0。使用0.5
,或者强制键入1.0/2.0
。非常感谢@1201programalm。我刚刚将您的答案添加为下面的最后一个。再次感谢您的快速帮助!!:-)您不应该期待sqrt(x)
精确等于pow(x,0.5)
或者;pow通常使用一种不同的算法,通常不能精确。(如果它在您的计算机上精确相等,这可能意味着pow实现注意到第二个参数0.5并调用sqrt。)除此之外:printf(“输入向量的%d分量:\n”,n)
比put(输入向量的5个分量:)更有意义;
提示:要更深入地了解sqrt(sum),pow(sum,0.5)
,请使用指数表示法:printf(“%e”,sqrt(sum)-pow(sum,0.5));
#include <stdio.h>
#include <math.h>
void print_vector(int N,float * V);
void save_vector(int N,float * V);
void absolute_values(int N,float * V, float * VABS);
void maximum_value(int N, float * VABS);
void general_norm(int N, float * VABS);
int main(void)
{
const int n=4;
int i;
float v[n],vabs[n];
puts("Enter the 5 components of the vector:");
save_vector(n, v);
puts("\nThe vector is:");
print_vector(n, v);
puts("\nThe absolute vector is:");
absolute_values(n, v, vabs);
puts("\nThe maximum value is:");
maximum_value(n, vabs);
puts("\nThe general norm is:");
general_norm(n, vabs);
return 0;
}
void save_vector(int N, float * V)
{
int i;
for(i=0;i<N;i++)
scanf("%f",V+i);
}
void print_vector(int N, float * V)
{
int i;
for(i=0;i<N;i++)
printf(" %.2f ",*(V+i));
}
void absolute_values(int N, float *V, float *VABS)
{
int i;
for(i=0;i<N;i++)
{
VABS[i]=((V[i]<0)?-V[i]:V[i]);
printf(" %f", VABS[i]);
}
}
void maximum_value(int N, float * VABS)
{
int i;
float maximum;
maximum = VABS[0];
for (i = 1; i < 4; i++)
{
if (VABS[i] > maximum)
{
maximum = VABS[i];
}
}
printf(" %f", maximum);
}
void general_norm(int N, float * VABS)
{
int i;
float sum;
for (i = 0; i < 4; i++)
{
sum=sum+pow(VABS[i],2);
}
printf(" %f",sqrt(sum));
printf(" %f",pow(sum,1/2));
}