You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求可实现-1映射到1、1映射到0的简单计算机数学函数

求可实现-1映射到1、1映射到0的简单计算机数学函数

哈哈,这种搞反精灵表行的情况我也碰到过!不用纠结,几个超简单的表达式就能搞定这个映射,都是你提到的标准计算机数学运算,给你列几个实用的选项:

  • 最简洁的线性表达式f(v) = (1 - v) / 2
    验证一下:当v=-1时,(1 - (-1))/2 = 2/2 = 1;当v=1时,(1 - 1)/2 = 0/2 = 0,完全符合你的需求。这个表达式计算效率极高,不管是整数还是浮点数环境都能直接用,甚至在只支持整数运算的语言里(比如C),结果也会是正确的整数,不需要额外处理。

  • 基于绝对值的表达式f(v) = (abs(v) - v) / 2
    这个逻辑也很直观:因为你的v只有±1两种值,abs(v)永远是1。代入v=-1时,(1 - (-1))/2 = 1;v=1时,(1 - 1)/2 = 0,同样满足要求。如果你的代码里已经频繁用到绝对值函数,这个写法也很顺手。

  • 整数位运算小技巧(仅适用于整数类型的v)f(v) = (1 - v) >> 1
    这其实是第一个表达式的整数优化版,因为对于整数来说,除以2等价于右移1位(正数和负数的补码右移都适用)。计算速度比除法更快,适合对性能有要求的场景,结果和第一个表达式完全一致。

直接把上面任意一个函数套在你的velocity变量上,得到的结果就是纠正后的精灵表行号,刚好能把搞反的行对应回来,完美解决你的问题~

备注:内容来源于stack exchange,提问作者Math chiller

火山引擎 最新活动