Почему `pow (sum, 1/2)` не дает мне тот же результат, что и `sqrt (sum))`? - PullRequest
1 голос
/ 27 апреля 2020

В конце кода есть функция внизу под названием general_norm, которая использует следующие функции print():

printf(" %f",sqrt(sum));
printf(" %f",pow(sum,1/2));

Пока sqrt(sum)) дает мне правильный результат, Я не понимаю, почему pow(sum,1/2) не учитывает это √x = x½.

Не могли бы вы помочь мне выяснить, что мне не хватает? Спасибо! : -)

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

1 Ответ

2 голосов
/ 27 апреля 2020

Просто оставив здесь ответ 1201ProgramAlarm дал мне:

Целочисленная математика. 1/2 - это 0. Либо используйте 0.5, либо принудительно введите тип 1.0 / 2.0.

1.0 / 2.

...