Hacker News 中文摘要

RSS订阅

弧度不如角度 (2022) -- Turns are Better than Radians (2022)

文章摘要

文章主张在编程中应优先使用“圈数”(turns)而非弧度,因为大多数情况下可以完全移除圆周率常数,使代码更简洁高效。

文章总结

好的,以下是根据您的要求,对原文主要内容进行的中文重述,已保留核心细节并删减了与主题无关的内容。


标题:圈数比弧度更好

文章指出,尽管此前人们大力推广用“τ”(约6.283)替代“π”(约3.141),但一个更重要的改进机会被忽略了:在大多数情况下,π和τ都可以被完全移除

文章的核心论点是:在代码中,π和τ最常见的用途是在调用三角函数(如sin、cos)时进行弧度转换。例如,程序员有一个值h,其范围已经是0到1的周期,但为了调用sin,他们不得不将其乘以τ。然而,查看sin函数的内部实现会发现,它几乎立即又将输入乘以了4/π(即除以π/4)。这意味着,调用代码先乘以π,库代码又立即将其除回来,这种“转换为弧度再转换回来”的操作是毫无意义的。如果双方都约定不使用弧度,而直接使用原始的[0, 1]区间(即“圈数”),调用方可以省去一次乘法,库方也能使用更简单、精确的常数。

此外,使用[0, 1]区间(圈数)比弧度更精确。常见的角度如90度(0.25)、180度(0.5)在圈数表示下是精确的浮点数,而在弧度制下则无法精确表示。

文章强调,用0到1来参数化圆并非随意想法,而是一个名为“”的合法数学概念。在圈数中,0代表0度,0.5代表180度,1代表360度,以此类推。

如果自己编写数学库,只需调整一个常数,就能让sin和cos函数接受圈数而非弧度。如果需要支持旧代码,可以为新的基于圈数的三角函数另起一名,让旧的弧度制函数通过调用新函数并除以τ来实现。

文章还提到了另一种替代方案:半圈(半圈),其中完整圆对应[0, 2]。一些数学库(如CUDA的sincospi函数)已经支持这种参数化方式,它计算输入值乘以π后的正弦和余弦,本质上就是半圈。

作者总结,在完全停止使用弧度后,代码中所有多余的τ和π都消失了,逻辑更清晰。将同样的逻辑应用于其他三角函数,通常只需删除代码即可完成转换。

评论总结

根据评论内容,主要围绕“用‘圈’(turns)替代弧度作为角度单位”的讨论,呈现以下核心观点:

支持使用“圈”的观点: - 便于处理四分之一圈等常见角度,避免浮点舍入误差(评论1:“makes quarter-turns computable without rounding”) - 简化欧拉公式表达,使其更直观(评论17:“-1^(2x) = cost(x) + i*sint(x)”) - 适合固定点运算和游戏开发,如Doom使用u16表示角度(评论13、18)

反对或保留态度的观点: - 弧度在微积分中具有天然优势,导数公式简洁(评论6:“d/dx sin(2pi x) = 2pi cos(2pi x)”) - 泰勒展开和数值优化中,弧度更高效准确(评论9:“less accurate and efficient to force everything into turns”) - 三角函数应用广泛,不仅限于几何(评论3:“input is not always an angle... could be phase angle of a periodic signal”) - 弧度是数学上的“正确”约定(评论10:“Radians really are the natural unit for trigonometry”)

折中建议: - 在标准库中同时提供两种版本(评论10:“support the addition of sint(x) and cost(x) functions”) - 根据应用场景选择单位(评论9:“application-dependent”) - 构建更复杂的角度类型,而非强制统一(评论22:“build a more complex angle type that doesn't force callers to conform”)

其他讨论: - 评论15介绍了军事上使用的“密位”(mil)单位,6400密位=1圈,便于炮兵计算 - 评论20提及Wildberger的“有理三角学”替代方案 - 评论4、5、7、14、16、19、21、23、24为技术细节或无关评论