Board logo

标题: [讨论]用批处理开方倒数的可行性讨论 [打印本页]

作者: electronixtar     时间: 2006-10-15 09:25    标题: [讨论]用批处理开方倒数的可行性讨论
Quake3引擎里用了这么一种火星算法:


//
// 计算参数x的平方根的倒数
//
float InvSqrt (float x)
{
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f3759df - (i >> 1); // 计算第一个近似根
x = *(float*)&i;
x = x*(1.5f - xhalf*x*x); // 牛顿迭代法
return x;
}


个人觉得 set /a 支持位运算,应该可以实现开方倒数的

作者: namejm     时间: 2006-10-15 09:40
  

在 SET 命令中添加了两个新命令行开关:

SET /A expression
SET /P variable=

/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式
评估器很简单并以递减的优先权顺序支持下列操作:

() - 分组
! ~ - - 一元运算符
* / % - 算数运算符
+ - - 算数运算符
<< >> - 逻辑移位
- 按位“与”
^ - 按位“异”
| - 按位“或”
= *= /= %= += -= - 赋值
&= ^= |= <<= >>=
, - 表达式分隔符

  微软的解释一直是语焉不详,除了算术运算符和赋值符号能熟练使用外,我一直没搞懂其余的究竟怎么使用,哪位使用过的请解释一下。

  CMD下不能直接计算小数乘法,还是得按位来操作。如果能理解以上的 set /a 符号是如何使用的话,开方的问题估计会迎刃而解。

作者: 不得不爱     时间: 2006-10-15 11:08
开方可以使用杨辉三角来解

作者: vkill     时间: 2006-10-16 00:08
用 set /a 太麻烦了,除法反正是麻烦

Last edited by he200377 on 2006-10-16 at 00:34 ]