游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2731|回复: 6

问下开方函数

[复制链接]

125

主题

364

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
QQ
发表于 2007-2-8 17:55:00 | 显示全部楼层 |阅读模式

是下面这个 计算快? 还是用牛顿迭代法算法快啊。


  1. #include   <math.h>   
  2. #include   <stdio.h>   
  3.    
  4.   void   main(   void   )   
  5.   {   
  6.         double   x   =   8.0,   y   =   1.0/3.0,   z;   
  7.    
  8.         z   =   pow(   x,   y   );   
  9.         printf(   "%.1f   to   the   power   of   %.1f   is   %.1f\n",   x,   y,   z   );   
  10.   }   

复制代码

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2007-2-9 09:51:00 | 显示全部楼层

Re: 问下开方函数

明显Newton Raphson's method要快,贴段代码,以前算布的时候用过的:

  1. float SquareRoot(float x)
  2. {
  3.         DWORD index;
  4.         float r;
  5.         DWORD *dptr = (DWORD *)&r;
  6.        
  7.         *(DWORD *)&r = (((EXPONENT_BIAS << MANTISSA_BITS) + EXP_OF(x)) >> 1) & EXPONENT_MASK;

  8.         index = ((*(DWORD *)&x) >> (MANTISSA_BITS - SQRT_TABLE_ENTRY_BITS + 1))
  9.                         & (SQRT_TABLE_NUM_ENTRIES - 1);
  10.         *dptr |= SqrtTab[index];

  11.         // One iteration of Newton Raphson's method will double the accuracy
  12.         r = (3.0f - (r * r) / x) * r * 0.5f;

  13.         return r;
  14. }
复制代码


不过用之前要初始化一次表,全部代码见附件:

sf_20072995052.rar

1.56 KB, 下载次数:

125

主题

364

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
QQ
 楼主| 发表于 2007-2-9 10:41:00 | 显示全部楼层

Re:问下开方函数

多谢大侠, 不过 猛然一看不知所措。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2007-2-9 10:48:00 | 显示全部楼层

Re:问下开方函数

原理就是把浮点数拆成sign位,mantissa和exponent位,然后根据这些信息插值

125

主题

364

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
QQ
 楼主| 发表于 2007-2-9 15:54:00 | 显示全部楼层

Re:问下开方函数

此外 如果用 预计算生成一个表,用查表法 和 牛顿迭代比较呢? 据说 在一定条件下用
Hash 查表 可以一次就找出来,小弟没试过,希望 介绍下。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2007-2-9 16:42:00 | 显示全部楼层

Re:问下开方函数

查完表之后要插值的..

2

主题

6

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2007-2-14 16:12:00 | 显示全部楼层

Re:问下开方函数

quake3原代码里有一个carmack实现的开方函数。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 10:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表