You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求O(1)时间复杂度的角度钳位函数:映射至[0, tau)

O(1) 实现将数值映射到 [0, τ) 区间

当然有全输入O(1)的解决方案,核心是利用取模运算的特性,同时处理JavaScript中负数取模的特殊行为:

const TAU = Math.PI * 2;
function clamp(theta) {
  const remainder = theta % TAU;
  return remainder >= 0 ? remainder : remainder + TAU;
}

原理说明

  • JavaScript 的 % 运算符对负数计算时会返回负余数(比如 -1 % TAU 结果为 -1),所以只需要对负余数额外加上 TAU,就能将结果拉到 [0, TAU) 区间内。
  • 不管输入是极大的正数、极小的负数还是零,整个过程只需要一次取模运算和一次条件判断,完全是常数时间复杂度 O(1),不会出现原实现中处理大负数时的循环迭代问题。

测试示例

  • 输入正数:clamp(TAU + 3.14) → 返回 3.14
  • 输入负数:clamp(-2) → 返回 TAU - 2(约等于4.283)
  • 输入τ的整数倍:clamp(5 * TAU) → 返回 0
  • 输入0:clamp(0) → 返回 0

内容的提问来源于stack exchange,提问作者error

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 22:48:13