MySQL错误? (三角函数)

标签 mysql trigonometry

当我偶然发现这个时,我正在通过为表中的字段预先计算一些三角函数来优化查询:

SELECT 6371 * acos( 0.793521289617132 * 0.793521289617132 + 0.608542490648241 * 0.608542490648241 * cos( 0.235244203230056 - 0.235244203230056 ) ) 

返回空值

具有非预先计算值的查询:

SELECT 6371 * acos( sin( radians( 52.51581 ) ) * sin( radians( 52.51581 ) ) + cos( radians( 52.51581 ) ) * cos( radians( g.lat ) ) * cos( radians( 13.4785 ) - radians( 13.4785 ) ) )

返回 0(这是正确的结果)

这是一个错误吗?还是预期的?

最佳答案

您的查询中存在一些舍入错误,这些错误是由浮点运算引起的。

如果你尝试这个查询

SELECT -1 + ( 0.793521289617132 * 0.793521289617132 + 0.608542490648241 * 0.608542490648241 * cos( 0.235244203230056 - 0.235244203230056 ) )

你会得到 6.66133814775094e-016。所以你要做的是

SELECT 6371 * acos( 1 + 6.66133814775094e-016 ) 

这显然行不通,因为 acos 仅在 [-1,1] 域上定义。

我不知道你到底想完成什么,但你必须重新计算,例如检查 acos 的参数是否越界,然后相应地设置值,可能是这样的:

ACOS( IF(val BETWEEN -1 AND 1, val, SIGN(val))

关于MySQL错误? (三角函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5411836/

相关文章:

php - 如果在使用 php 的 2 个 mysql 查询中的复选框

php - Laravel GroupBy 使用数据库表列值

javascript - Javascript 中带有加减号 (±) 的极坐标曲线方程

javascript - 如何获得圆的x、y距离

python - Python 中的直角锐角三角形和钝角三角形

php - 了解准备好的语句 - PHP

mysql - 问号DQL是不是没有考虑?

mysql - 使用另一个 XML 数据在 XML 中搜索

audio - 正弦波音乐发生器

c# - 确定圆上的线段选择