距离计算,acos = Nan而不是0

时间:2017-04-29 22:45:05

标签: ios swift math swift3

我的距离计算功能有点问题,这是我们在tsum == 1

playground showing problem

实际上在运行时(在我的真实应用中,在模拟器中),t1 + t2 + t3 == 1.0000000000000002

t1 + t2 + t3 == 1.0000000000000002

它真的很奇怪,因为当我手动计算它时,我有1

manual calculation

但是ios似乎并不同意。 你能解释一下吗?

P.S:这是一个到操场的链接 https://drive.google.com/drive/folders/0B6uRRn4bFMAeN3kwSVc4dUVQcDQ?usp=sharing

P.S.2:我给出了一个截图来证明我没有操纵价值观: complete screenshot at runtime

1 个答案:

答案 0 :(得分:3)

如果您正在寻找可在Apple平台上运行的内容,请使用

import CoreLocation

let lat0 = 0.0
let lon0 = 0.0

let lat1 = 90.0
let lon1 = 180.0

let l0 = CLLocation(latitude: lat0, longitude: lon0)
let l1 = CLLocation(latitude: lat1, longitude: lon1)

let distance = l0.distance(from: l1) // in meters

如果您不喜欢,请替换您的公式

d = acos(sinφ1⋅sinφ2+cosφ1·cosφ2·cosΔλ)·R

a =sin²(Δφ/ 2)+cosφ1·cosφ2⋅sin²(Δλ/ 2)

c =2⋅atan2(√a,√(1-a))

d = R·c

这被称为 hasrsine 公式。在atan2函数的帮助下,您可以避免浮点数学问题