Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么‘pow(sum,1/2)’不能给我与‘sqrt(sum))相同的结果呢?_C_Square Root - Fatal编程技术网

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));
}