我需要在sqlite数据库中计算欧氏距离。
除了编写和加载数学函数的动态库外,有谁知道如何在sqlite中计算平方根?
我接近诉诸快速反平方根算法在这里http://en.wikipedia.org/wiki/Fast_inverse_square_root虽然它可能会变成更有趣的比我需要现在。
顺便说一句,如果能弄清楚如何计算幂就好了(这是一个广义的问题,而且比将一个数字乘以它本身更干净)。
谢谢
西蒙尼
我需要在sqlite数据库中计算欧氏距离。
除了编写和加载数学函数的动态库外,有谁知道如何在sqlite中计算平方根?
我接近诉诸快速反平方根算法在这里http://en.wikipedia.org/wiki/Fast_inverse_square_root虽然它可能会变成更有趣的比我需要现在。
顺便说一句,如果能弄清楚如何计算幂就好了(这是一个广义的问题,而且比将一个数字乘以它本身更干净)。
谢谢
西蒙尼
7条答案
按热度按时间gv8xihay1#
我有一个半答案。
是的,它涉及第三方,但你不必自己写:你查过this page上的最后一个分机号了吗?
它包括几个数学函数,其中包括sqrt()。
bvn4nwqk2#
**警告:**此答案取决于编码语言。在我的例子中,C#。
用户定义的SQLite函数对我来说是一个痛苦的实现。最后,经过长时间的搜索,我能够在我的C#代码中实现它。Main函数看起来像这样:
注册自定义函数:
并在select中使用:
你可以在这里下载完整的例子:http://db.tt/qzeNXwso
或者,如果你只想查看代码(或通过我的代码的所有部分),我粘贴下面的SQLite数据库中计算平方根的完整工作示例代码,因为很难找到任何工作代码。要创建并运行此示例,请执行以下6个步骤:
1.创建新项目(我的名字是Sqrt)
1.将SQLite引用包含到项目中:
1.打开 App.config 并替换为这个(如果没有这个步骤,你可能会得到 Mixed mode assembly error):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
1.将 Form1.Designer.cs 替换为以下代码:
1.打开Form1.cs(code)并将代码替换为:使用系统;使用System.Data.SQLite;使用System.Windows.Forms;
1.奔跑吧,尽情享受。
htrmnn0y3#
对于10000以下的数,这是sqrt的近似值。它可以扩展到任意数量,并可以根据需要扩展到任意精度。这种表格插值是大多数快速实现中发生的事情:
还有一个奇怪的事实,你在这样一个10次方平方根插值表中使用的每个因子都是前一个因子的0.316227766倍-所以你可以让它适用于任意大的数字,甚至可以用这些值填充一个表格,使它适用于任何数字。(这会导致一些压缩吗?)
或者这个可爱的log 10整数,使用length函数(插值表可能在这里工作得更好,但我喜欢log 10和length()是相似的,这适用于任何整数-不需要插值。
一个比我更好的数学头脑可能会想出更好和更密集的近似。考虑到c中的大多数sqrt函数无论如何都使用近似-这是一个相当不错的解决方案。
ecfsfe2w4#
据我所知-你不能只使用核心功能。
下面是原生函数Core functions的列表和聚合函数Aggregate functions的列表。
要解决这个问题,您可以编写自己的UDF(用户定义函数),如图所示HERE
55ooxyrt5#
仅当数学函数不可用时...真的只有在绝望中因为这不会很快
8yoxcaq76#
2021-03-12(3.35.0)
增加内置SQL数学函数()。(需要-DSQLITE_ENABLE_MATH_FUNCTIONS编译时选项。)
Built-In Mathematical SQL Functions
**sqrt(X)**返回X的平方根。如果X为负数,则返回NULL。
iovurdzv7#
如果你需要的距离只是比较在您的选择,你不需要sqrt。你也可以和动力距离比较。。
.和sqrt的距离稍后在你的代码以外的sqlite。
但如果你需要选择一个ceatain区域的gps点,这里是我在OpenAI(GPT-4)的帮助下制作的dart代码:
这将计算矩形面积。如果你需要圆,你可以先选择一个矩形,然后用距离计算方法切断边缘,就像这样: