PostgreSQL 上浮点数的模运算
Modulo operation on floating point numbers on PostgreSQL
我想在 PostgreSQL 中执行两个浮点整数之间的模运算。具体来说,我希望强制执行角度算术,例如经过一些数学运算后,强制角度位于区间 [0,2*pi] 内。
我可以看到 fmod
或者 SQL 没有正式支持。有什么合理的解决方法吗?
自己创建这样的函数很简单:
CREATE FUNCTION fmod (
dividend double precision,
divisor double precision
) RETURNS double precision
LANGUAGE sql IMMUTABLE AS
'SELECT dividend - floor(dividend / divisor) * divisor';
你可以用它来解决你的问题:
SELECT fmod(1000, 2.0 * pi());
fmod
-------------------
0.973536158445768
(1 row)
这个函数可以内联,所以应该会很高效。
我想在 PostgreSQL 中执行两个浮点整数之间的模运算。具体来说,我希望强制执行角度算术,例如经过一些数学运算后,强制角度位于区间 [0,2*pi] 内。
我可以看到 fmod
或者 SQL 没有正式支持。有什么合理的解决方法吗?
自己创建这样的函数很简单:
CREATE FUNCTION fmod (
dividend double precision,
divisor double precision
) RETURNS double precision
LANGUAGE sql IMMUTABLE AS
'SELECT dividend - floor(dividend / divisor) * divisor';
你可以用它来解决你的问题:
SELECT fmod(1000, 2.0 * pi());
fmod
-------------------
0.973536158445768
(1 row)
这个函数可以内联,所以应该会很高效。