无输出

Bug~ 2020-01-08 08:24:20
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define pi 3.1415926535897932

double sinx(double a);

int main(void)
{
double a;
scanf("%lf", &a);

printf("a = %lf\n", a);
printf("角a(弧度制)的正弦值为:%lf \n",sinx(a));
return 0;
}

double sinx(double a)
{
int i;
double angle[] = {atan(1),atan(1/2),atan(1/4),atan(1/8),atan(1/16),
atan(1/32),atan(1/64),atan(1/128),atan(1/256),atan(1/512),
atan(1/1024),atan(1/2048),atan(1/4096),atan(1/9192)};

double tan1[]={1,1/2,1/4,1/8,1/16,1/32,1/64,1/128,1/256,
1/512,1/1024,1/2048,1/4096,1/9192};

if(a <= (atan(1/9192))) {
return a; //因为a的值太小,sin a 约等于 a
}else{

//开始 CORDIC 算法

int negative = a < 0; // sin(-a) = -sin(a)

double x = 10;

double y = 0;

double theta = 0;

for(i = 0;i < 13;i ++){ //开始迭代

double orix,oriy;

while(theta < a){ //当前角度小于a

orix = x;

oriy = y;

//坐标旋转

x = orix - tan1[i] * oriy;

y = tan1[i] * orix + oriy;

theta += angle[i];

}

if(theta == a){

if(negative){

return -(y/sqrt((x*x+y*y)));

}else{

return (y/sqrt((x*x+y*y)));

}

}else{

//旋转的弧度超过了a,退回原来增加的角度,同时进入下一次迭代

theta -= angle[i];

x = orix;

y = oriy;

}

}

if(negative){

return -(y/sqrt((x*x+y*y)));

}else{

return (y/sqrt((x*x+y*y)));

}

}

}
...全文
63 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2020-01-08
  • 打赏
  • 举报
回复
还有, 知道了答案的帖子,都去结贴付分儿去 ,要不后面面没人愿意回答你的问题
寻开心 2020-01-08
  • 打赏
  • 举报
回复
double angle[] = {atan(1),atan(1/2),atan(1/4),atan(1/8),atan(1/16),
atan(1/32),atan(1/64),atan(1/128),atan(1/256),atan(1/512),
atan(1/1024),atan(1/2048),atan(1/4096),atan(1/9192)};

double tan1[]={1,1/2,1/4,1/8,1/16,1/32,1/64,1/128,1/256,
1/512,1/1024,1/2048,1/4096,1/9192};

你不考虑整数除法吗? 这些参数绝大多数都被你初始化为0了

1/2 , 1/4 , 。。。。。这些都是0

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧