我需要在sqlite数据库中计算欧几里得距离。
除了为数学函数编写和加载动态库之外,有人知道如何在sqlite中计算平方根吗?
在这里的http://en.wikipedia.org/wiki/Fast_inverse_square_root中,我即将求助于快速的平方根反比算法,尽管它可能会变得比我现在需要的更有趣。
顺便说一句,弄清楚如何做幂是很棒的(这是一个普遍的问题,比起数字本身的乘法,这是一个更简洁的编码)。
谢谢,
西蒙尼
发布于 2012-10-05 00:48:08
发布于 2016-10-20 05:24:44
这是10000以下数字的sqrt近似值。它可以扩展为任意数字,并可以根据需要扩展到任意精度。这种表格插值在大多数快速实现中都会发生:
case when weight >= 1 and weight<=10 then 1+0.240253073*(weight-1)
when weight>=10 and weight<=100 then 3.16227766+0.075974693*(weight-10)
when weight>=100 and weight<=1000 then 10+0.024025307*(weight-100)
else 31.6227766+0.007597469 *(weight-1000) end
而且有一个奇怪的事实,你在这样一个10的平方根插值表中使用的每个因子都是前一个因子的0.316227766倍-所以你可以让它适用于任意大的数字,或者甚至填满一个充满这些值的表,使它适用于任何数字。(这会导致一些压缩吗?)
或者这个可爱的整数长度函数,使用长度函数(插值表在这里可能工作得更好,但我喜欢log10和log10 ()相似,并且它对任何整数都有效-不需要插值)。
((length(x)+length(x*2)+length(x*3)
+length(x*4)+length(x*5))/5.0)-1.0
一个比我更好的数学头脑可能会想出更好和更密集的近似。考虑到c中的大多数sqrt函数都使用近似值,这是一个很好的解决方案。
这是唯一的原生方法。
发布于 2012-10-05 00:53:19
据我所知,你不能只使用核心函数来做到这一点。
下面是本机函数Core functions和聚合函数Aggregate functions的列表。
要解决您的问题,您可以编写自己的UDF (用户定义函数),如HERE所示
https://stackoverflow.com/questions/12731941
复制相似问题