Vic*_*huk 6 php math floating-point trigonometry nan
这是我的代码:
<?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
Run Code Online (Sandbox Code Playgroud)
正如您从注释中看到的,$dist等于1在计算之后,但是在我应用acos()时返回NAN。
如果我尝试手动复制它,则效果很好:
$x = 1;
$x = acos($x);
var_dump($x); // returns 0 as expected
Run Code Online (Sandbox Code Playgroud)
这是怎么回事,我该如何解决?
找到了解决方案。看来问题与精度有关。如果我确定该$dist值在[-1,1]范围内,则可以正常工作:
$dist = acos(min(max($dist,-1.0),1.0));
Run Code Online (Sandbox Code Playgroud)
工作示例:https://3v4l.org/dlunK
| 归档时间: |
|
| 查看次数: |
976 次 |
| 最近记录: |