c - 此代码显示错误。你能教我什么是错误以及如何改变它吗?
问题描述
ERRRO CODE(高级电源功能)
当我操作这段代码并编写输入时,输出是错误的。
使用:ln(x), e^x
考虑什么时候 a == 0 x 可以是正数、负数或零或任何小数,如果 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
我应该改变什么......
解决方案
输入“2.0 0.5”,a
设置为 2,x
设置为 0.5。然后advancedpower
使用参数 2 和 .5 调用。反过来,也使用参数 2 和 .5advanceddpower
调用。power
power
是一个递归函数。当x
和y
不为零时,它调用power(x, y - 1)
. 这导致power
使用参数 2 和 -.5 进行调用。然后它再次执行相同的代码,power
使用参数 2 和 -1.5 进行调用。然后再次使用 2 和 -2.5。这种情况一直持续到堆栈耗尽,程序崩溃。
尚未编写此代码来处理这些值。你需要重新考虑设计。
推荐阅读
- python - 如何使用 tf.one_hot 计算一种热编码?
- bash - 如何在 Jenkins 运行的 bash 脚本中转义单引号?
- sql - Rails 按关联记录数选择
- ruby-on-rails - 在数据库设计中管理多个类别的最佳方法
- ios - 如果未附加调试器,则 React Native 应用程序在启动时无响应
- flutter - Flutter:地图依赖使应用程序崩溃
- vue.js - 如何使用 @mouseover 更改 v-img 组件上的图像?
- php - 发送多个同名数据
- linux - 如何根据 2 个或更多列值拆分文件
- shiny - 在“rdrop2”中找不到文件问题(闪亮)