Board logo

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

作者: electronixtar     时间: 2006-10-15 09:25    标题: [讨论]用批处理开方倒数的可行性讨论

Quake3引擎里用了这么一种火星算法:
CODE:  [Copy to clipboard]
//
// 计算参数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
  
CODE:  [Copy to clipboard]
在 SET 命令中添加了两个新命令行开关:

    SET /A expression
    SET /P variable=[promptString]

/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 ]




欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) Powered by Discuz! 2.5