这是我的代码:
<?php
$lat1 = 35.697959;
$lat2 = 35.697959;
$lon1 = 139.707085;
$lon2 = 139.707085;
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
var_dump($dist); // returns 1
$dist = acos($dist);
var_dump($dist); // returns NAN
从评论中可以看出,$dist
在计算后等于1
,但是当我应用acos()
时返回 NAN
。
如果我尝试手动复制它,它工作得很好:
$x = 1;
$x = acos($x);
var_dump($x); // returns 0 as expected
这是怎么回事,我该如何解决?
Here's the same code在在线 shell 中,因此您可以看到它实际上返回了这些值。
最佳答案
找到解决方案。看来问题与精度有关。如果我确保 $dist
在 [-1,1]
范围内,它工作正常:
$dist = acos(min(max($dist,-1.0),1.0));
关于php - acos(1) 在某些情况下返回 NAN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37184259/