gpt4 book ai didi

r - acos(1)返回NaN的某些值,而不是其他值

转载 作者:行者123 更新时间:2023-12-04 07:40:35 25 4
gpt4 key购买 nike

我有一个经度和纬度值的列表,我试图找到它们之间的距离。使用标准的大圆方法,我需要找到:

acos(sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2) * cos(long2-long1))

并将其乘以我使用的单位的地球半径。只要我们采用acos的值在[-1,1]范围内,这就是有效的。如果它们甚至略微超出此范围,即使差异是由于四舍五入,它也会返回 NaN

我的问题是,有时候,当两个纬度/经度值相同时,这会给我一个 NaN错误。即使对于相同的一对数字,也并非总是如此,但列表中的数字总是相同。例如,我有一个人在沙漠的道路上停下来:
Time  |lat     |long
1:00PM|35.08646|-117.5023
1:01PM|35.08646|-117.5023
1:02PM|35.08646|-117.5023
1:03PM|35.08646|-117.5023
1:04PM|35.08646|-117.5023

当我计算连续点之间的距离时,例如,第三个值将始终为 NaN,即使其他值不是。 R舍入似乎是一个奇怪的错误。

最佳答案

在看不到您的数据的情况下无法准确分辨(尝试dput),但这很可能是FAQ 7.31的结果。

(x1 <- 1)
## [1] 1
(x2 <- 1+1e-16)
## [1] 1
(x3 <- 1+1e-8)
## [1] 1
acos(x1)
## [1] 0
acos(x2)
## [1] 0
acos(x3)
## [1] NaN

也就是说,即使您的值如此相似以至于它们的打印表示形式相同,它们也可能会有所不同:有些将在 .Machine$double.eps中,而另一些将不会...

确保输入值受[-1,1]限制的一种方法是使用 pmaxpmin: acos(pmin(pmax(x,-1.0),1.0))

关于r - acos(1)返回NaN的某些值,而不是其他值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14026297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com