免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 12152 | 回复: 13
打印 上一主题 下一主题

请教,哪儿有sin,cos函数的实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-09 13:11 |只看该作者 |倒序浏览
30可用积分
请教一下,sin,cos函数的实现。在网上搜了一下没有搜到相关的源码。谢谢

最佳答案

查看完整内容

泰勒展开或者贝赛耳曲线?

论坛徽章:
0
2 [报告]
发表于 2009-07-09 13:11 |只看该作者
泰勒展开或者贝赛耳曲线?

论坛徽章:
0
3 [报告]
发表于 2009-07-09 13:23 |只看该作者
/******************************************************************
*
* File Name:       pw_sin.h
* Description:     The sin() function map. Using it to calculate a
*                                         angle's sine value and cosine value.
*                                         e.g.
*                                                 angle d=30 degrees,
*                                                 sin(d) = (sin_map[30] >> SIN_MAP_SHIFT)
*                                                 result: sin(30) = 0.5
*                  
* Author :         Jiang Peifu
* Date:            2009.04.27
*/
#ifndef PW_SIN_H
#define PW_SIN_H
/* -------------------------------------------------------------------------- */
#define SIN_MAP_SHIFT 15
#define DEGREE_MIN 0
#define DEGREE_MAX 90
#define SIN_MAP_SIZE (DEGREE_MAX - DEGREE_MIN + 1)
#define rsin(_r_, _d_) ((_r_ * sin_map[_d_] + 0x4000) >> SIN_MAP_SHIFT)
#define rcos(_r_, _d_) ((_r_ * sin_map[DEGREE_MAX-_d_] + 0x4000) >> SIN_MAP_SHIFT)
int sin_map[SIN_MAP_SIZE] = {
    0,
    572,
    1144,
    1715,
    2286,
    2856,
    3425,
    3993,
    4560,
    5126,
    5690,
    6252,
    6813,
    7371,
    7927,
    8481,
    9032,
    9580,
    10126,
    10668,
    11207,
    11743,
    12275,
    12803,
    13328,
    13848,
    14365,
    14876,
    15384,
    15886,
    16384,
    16877,
    17364,
    17847,
    18324,
    18795,
    19261,
    19720,
    20174,
    20622,
    21063,
    21498,
    21926,
    22348,
    22763,
    23170,
    23571,
    23965,
    24351,
    24730,
    25102,
    25466,
    25822,
    26170,
    26510,
    26842,
    27166,
    27482,
    27789,
    28088,
    28378,
    28660,
    28932,
    29197,
    29452,
    29698,
    29935,
    30163,
    30382,
    30592,
    30792,
    30983,
    31164,
    31336,
    31499,
    31651,
    31795,
    31928,
    32052,
    32166,
    32270,
    32365,
    32449,
    32524,
    32588,
    32643,
    32688,
    32723,
    32748,
    32763,
    32768,
};
#endif /* PW_SIN_H */

看下这个

论坛徽章:
0
4 [报告]
发表于 2009-07-09 13:23 |只看该作者
文件i_sin.h中,保存了0-90度角的sin值向左位移15后的结果。对每个角度的三角函数做运算时,以角度为小标在sin_map表中查找相应的sin值(位移后的结果)。之所以要对sin值向左位移,是保证可以用整数来表达sin值。位移的大小(本文中为15),标称了sin值取值的精度,越大,sin值取值越精确。

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
5 [报告]
发表于 2009-07-09 13:28 |只看该作者
libc里边没有吗?

论坛徽章:
0
6 [报告]
发表于 2009-07-09 13:40 |只看该作者

回复 #4 VIP_fuck 的帖子

那个下面没有,其实可以去math目录下看看

论坛徽章:
0
7 [报告]
发表于 2009-07-09 13:42 |只看该作者
我记得南开100题中有一道,也许对你有用

题目21:下列程序的功能是:利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。xn+1=cos(xn)
迭代步骤如下:
(1)取X1初值为0.0;
(2)X0=X1,把X1的值赋给X0;
(3)X1=COS(X0),求出一个新的X1;
(4)若X0-X1绝对值小0.000001,执行步骤(5),否则执行步骤(2);
(5)所求X1就是方程cos(X)-X=0的一个实根,作为函数值返回。

论坛徽章:
0
8 [报告]
发表于 2009-07-09 13:48 |只看该作者
原帖由 aaaaa5aa 于 2009-7-9 13:23 发表
文件i_sin.h中,保存了0-90度角的sin值向左位移15后的结果。对每个角度的三角函数做运算时,以角度为小标在sin_map表中查找相应的sin值(位移后的结果)。之所以要对sin值向左位移,是保证可以用整数来表达sin值 ...


先谢谢,有没有那种不用查表的方式呢?而且精度要比较高点的。

因为我现在用的环境自带的sin等函数都只是单精度的,使得最终结果差别较,所以我想能否找一个源码来自己去调用。

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
9 [报告]
发表于 2009-07-09 14:09 |只看该作者
LZ可以自己写个!
先把sin、cos用级数表示出来!

论坛徽章:
0
10 [报告]
发表于 2009-07-09 15:04 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP