【发布时间】:2018-11-26 18:02:21
【问题描述】:
我希望在 PostgreSQL 中执行两个浮点整数之间的模运算。具体来说,我希望强制执行角度算术,例如经过一些数学运算后,强制角度位于区间 [0,2*pi] 内。
我可以看到fmod 或 SQL 不正式支持此类。有什么合理的解决方法吗?
【问题讨论】:
-
您使用 [0, 2π] 而不是 [−π, π] 是否有原因。后者对浮点有一些更好的属性。
-
这些是什么?
-
您的问题不清楚。也许 π 字符没有为您正确显示?问题是为什么你使用 [0, 2*pi] 而不是 [-π, π]?
-
没错。问题是使用 [−π, π] 而不是 [0, 2π] 的更好属性是什么。
-
可以在没有错误的情况下主要减少到对称间隔。为了说明,考虑两位十进制格式。如果我们将 -.012 映射到 [0, 2],最接近的可表示值是 1.9。 (确切的结果是 1.88,因为它是三位数字,所以无法表示,所以它是四舍五入的。)对于对称间隔,没有值在数量级上增加; none 从浮点格式的较精细区域(较低的指数,可表示值之间的较小步长)映射到较粗略的区域(较大的指数,较大的步长)。使用 [0, 2π],您的小负角会丢失。
标签: postgresql floating-point modulo