Этот код показывает ошибку.Не могли бы вы научить меня, что это за ошибка и как ее исправить? - PullRequest
0 голосов
/ 06 апреля 2019

ERRRO CODE (расширенная функция мощности)

Когда я работаю с этим кодом и записываю ввод, вывод получается неправильным.

использование: ln (x), e ^ x

рассмотрим, когда == 0 х может быть положительным, отрицательным или нулевым или любым дробным числом если a == 0 -> a ^ x = 0

a^x=advancedpower(ln(exp(power(a^x)))
#include <stdio.h> 
#include <assert.h> 
int factorial(int x) 
{  
  if(x>0) 
  { 
    return (x*factorial(x-1)); 
    } 
    if(x==0) 
    {
    return 1; 
    } 
    else 
    return 0; 
}
float power(float x, float y) 
{ 
  float r; 
  r=1.0; 
  if (x==0) 
  { 
    return 0; 
    } 
    if (y==0&& x!=0) { 
    return 1; 
    } 
    else 
    for(int i=1; i<=y;i++) { 
    r=r*x;
    } 
    return r; 
} 

float exp(float x){ 
  float sum=1.0; 
  for (int i = 0;i<10; i++) { 
  sum = sum + (power(x,i)/factorial(i)); 
  } 
  return sum; 
} 

float ln(float x)
{ 
assert(x > 0); 
float o= 1.0; 
    for (int i = 1;; i++) { 
    int k = 2*i-1; 
    float t = 2.0* power((x-1)/(x+1),k)/k; 
    o=o+t; 
    } 
    return o; 
} 

float advancedpower(float n1,float n2){ 
    if (n1 ==0){
    return 0; 
    } 
    else 
    return (exp(power(n1,n2))); 
} 

int main() 
{ 
  float a, x; 
  scanf("%f%f", &a, &x); 
  printf("%.4f", advancedpower(a, x)); 
  return 0; 
}

ввод 2,0 0,5 выход 1.4142

однако, когда я ввожу 2,0 0,5, вывод будет 3,7183

Что я должен изменить .....

1 Ответ

1 голос
/ 06 апреля 2019

При вводе «2.0 0,5» a устанавливается на 2, а x устанавливается на .5. Затем вызывается advancedpower с аргументами 2 и .5. В свою очередь, advanceddpower вызывает power, также с аргументами 2 и .5.

power - рекурсивная функция. Когда x и y не равны нулю, он вызывает power(x, y - 1). Это приводит к вызову power с аргументами 2 и −.5. Затем он снова выполняет тот же код, который вызывает power с аргументами 2 и -1,5. Затем снова с 2 и -2,5. Это продолжается до тех пор, пока стек не будет исчерпан и программа не выйдет из строя.

Этот код не был написан для обработки этих значений. Вам нужно переосмыслить дизайн.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...