论坛风格切换切换到宽版
  • 3754阅读
  • 13回复

[X疼帖]做了个各种方法实现sin的对比 [复制链接]

上一主题 下一主题
离线鸡蛋灌饼
 
发帖
2847
樱饼
0
博丽神社的喝茶券(威望)
0
春度
280
交易币
0
只看楼主 倒序阅读 楼主  发表于: 2008-01-15
方法1:查表(取整法)
耗时:0.0330067秒
平均误差:5.55984e-005
0.0564449%
最大误差:0.000174972

方法2:查表(线性插值)
耗时:0.08173027秒
平均误差:1.99941e-007
0.000134637%
最大误差:5.96046e-007

方法3:Taylor展开前四项
耗时:0.0161602秒
平均误差:1.57428e-005
0.00160623%
最大误差:0.000156939

标准数据:CRT Lib提供的sinf函数
耗时:0.0729308秒

结论:在不要求精度,要求速度的情况下使用泰勒展开是最合适的选择。



附件说明:注意不要在小内存的机器上测试此程序,若要测试,可以将max_n改为较小的值,如131072
描述:sin函数值表用的是bot的……
附件: TestTF(7zip).rar (38 K) 下载次数:78
我一定是需要寻找自我了……
离线大树懒
发帖
38
樱饼
0
博丽神社的喝茶券(威望)
0
春度
22
交易币
0
只看该作者 1楼 发表于: 2008-01-15
真疼
大家都很开心,除了我以外
离线lwwin
发帖
95
樱饼
0
博丽神社的喝茶券(威望)
0
春度
2
交易币
0
只看该作者 2楼 发表于: 2008-01-15
Used Time:0.0560714
Used Time:0.112984
Used Time:0.0537068
Used Time:0.111792
Table Sin:
Average Error-5.55972e-005
-0.056444%
Table Sin(interpolated):
Average Error-2.82109e-008
3.31475e-005%
Taylor Sin:
Average Error-1.57428e-005
-0.00160623%
基本对应,不过偶机器这里使用查表和泰勒差别不大……
另外看来最好不要随便去使用什么差值算法远不如标准方法- -~
水水,第二代littlewater
离线lwwin
发帖
95
樱饼
0
博丽神社的喝茶券(威望)
0
春度
2
交易币
0
只看该作者 3楼 发表于: 2008-01-15
calc(calc_table_sin);
calc(calc_table_sin_interpolated);
calc(calc_taylor_sin);
calc(calc_std_sin);

补充,多测试了几个值,基本上
(1) 0.04
(2) 0.11
(3) 0.05
(4) 0.11
即偶的机器上明显最好还是查表XD~
水水,第二代littlewater
离线鸡蛋灌饼
发帖
2847
樱饼
0
博丽神社的喝茶券(威望)
0
春度
280
交易币
0
只看该作者 4楼 发表于: 2008-01-15
我感觉查表的精度-速度的平衡没有Taylor展开好,而且Taylor展开很好写,也很好平衡
对Taylor的精度不满意可以加几项,对速度不满意可以减几项
以下是Taylor三项的结果,彻底压倒了查表等其他方法

Used Time:0.0279161
Used Time:0.0311573
Used Time:0.0115529
Used Time:0.0413832
Table Sin:
Average Error: 5.55984e-005
0.0564449%
Max Error: 0.000174972
Table Sin(interpolated):
Average Error: 1.99941e-007
0.000134637%
Max Error: 5.96046e-007
Taylor Sin:
Average Error: 0.000569145
0.0586697%
Max Error: 0.00452483


即使是Taylor四项也有不小优势

Used Time:0.0193972
Used Time:0.031823
Used Time:0.0127511
Used Time:0.0400682
Table Sin:
Average Error: 5.55984e-005
0.0564449%
Max Error: 0.000174972

Table Sin(interpolated):
Average Error: 1.99941e-007
0.000134637%
Max Error: 5.96046e-007

Taylor Sin:
Average Error: 1.57428e-005
0.00160623%
Max Error: 0.000156939


注:主帖的测试有误(当时用的是Debug),上面的结果是使用了Release并使用农民方法预热CACHE的结果(就是测试calc_table_sin前先计算一下,不然查表比插值查表还慢,可以肯定是CACHE的关系)
附件: TestTF2(7z).rar (149 K) 下载次数:39
我一定是需要寻找自我了……
离线h5nc
发帖
2724
樱饼
0
博丽神社的喝茶券(威望)
2
春度
738
交易币
0
只看该作者 5楼 发表于: 2008-01-15
其实……我之所以使用查表是因为我的精度本身就需求百分之一度……
如果计算一下,我实际需要(440+480)*2*1/movelimit
也就是从任意一点可以映射到另一点的值,考虑最低步长
现在movelimit基本上约等于0.05
这个值一部分状况下有利于基本直线运动,因为误差小于0.05像素的部分被舍去了,保证了直线运动的无误差(在已经忽略终点误差的情况下……就是说保证走的是直线……)
而这个值是够的………………
更深的精确度我感觉完全没必要……

嗯,泰勒展开是这么一回事啊……看来有必要探究一下……

0x073《東方弾置場》开发版即将问世
【Leah】引擎问世
同人STG《叛境东方游》已经腰斩
《叛之境界无双篇》已死
离线野风信子
发帖
255
樱饼
0
博丽神社的喝茶券(威望)
20
春度
6
交易币
0
只看该作者 6楼 发表于: 2008-01-16
提示压缩包损坏=A=

我がポニテは無敵なり!!
离线鸡蛋灌饼
发帖
2847
樱饼
0
博丽神社的喝茶券(威望)
0
春度
280
交易币
0
只看该作者 7楼 发表于: 2008-01-16
引用第6楼野风信子于2008-01-16 14:27发表的  :
提示压缩包损坏=A=

换7z解压,或者升级一下rar……
我一定是需要寻找自我了……
离线littlewater
发帖
793
樱饼
5
博丽神社的喝茶券(威望)
1
春度
59
交易币
0
只看该作者 8楼 发表于: 2008-01-18
Used Time:0.044145
Used Time:0.103054
Used Time:0.0671177
Used Time:0.102333

Used Time:0.0255113
Used Time:0.126997
Used Time:0.0487355
Used Time:0.104092

换台机器貌似还是一样的结果,偶始终认为查表算法还是在偶这里效率高- -
直接运行现有的EXE,省得配BOOST……
水水
离线h5nc
发帖
2724
樱饼
0
博丽神社的喝茶券(威望)
2
春度
738
交易币
0
只看该作者 9楼 发表于: 2008-01-18
预热CACHE………………………………………………
不应该这样……


不过,进而发现了严重的问题…………………………………………………………………………………………………………………………………………………………………………………………………………………………

在计算比如30个sin、cos值的时候……………………………………………………
完完全全查表变得非常慢!!!555555555555555555555555555555555
这才是用到最多的情况啊……
(我再说我那精度下……)

0x073《東方弾置場》开发版即将问世
【Leah】引擎问世
同人STG《叛境东方游》已经腰斩
《叛之境界无双篇》已死
离线鸡蛋灌饼
发帖
2847
樱饼
0
博丽神社的喝茶券(威望)
0
春度
280
交易币
0
只看该作者 10楼 发表于: 2008-01-18
引用第9楼h5nc于2008-01-18 22:58发表的  :
预热CACHE………………………………………………
不应该这样……
不过,进而发现了严重的问题…………………………………………………………………………………………………………………………………………………………………………………………………………………………
.......

你不觉得在速度差不多的情况下查表需要一个很大的文件么……这点很破坏程序的美观
至于预热CACHE我承认我不会用SSE……
我一定是需要寻找自我了……
离线Advance
发帖
2680
樱饼
0
博丽神社的喝茶券(威望)
2
春度
427
交易币
0
只看该作者 11楼 发表于: 2008-01-19
引用第10楼鸡蛋灌饼于2008-01-18 23:22发表的  :
你不觉得在速度差不多的情况下查表需要一个很大的文件么……这点很破坏程序的美观[表情]
至于预热CACHE我承认我不会用SSE……


啥?表不是运行的时候生成的咩
离线鸡蛋灌饼
发帖
2847
樱饼
0
博丽神社的喝茶券(威望)
0
春度
280
交易币
0
只看该作者 12楼 发表于: 2008-01-19
引用第11楼Advance于2008-01-19 09:24发表的  :
啥?表不是运行的时候生成的咩

bot是把它写到文件里了
我一定是需要寻找自我了……
离线lwwin
发帖
95
樱饼
0
博丽神社的喝茶券(威望)
0
春度
2
交易币
0
只看该作者 13楼 发表于: 2008-01-25
估计通用的最快未必存在??

总之用最顺手的方法就对了!
水水,第二代littlewater
快速回复
限100 字节
 
上一个 下一个