【发布时间】:2016-12-29 18:43:51
【问题描述】:
我正在使用纬度和经度来确定营业地点,但遇到了一些奇怪的行为。
在下面的 Perl sn-p 中,将数据分配给 $v1 的等式计算结果为 1。当我调用 acos($v1) 时,我收到 sqrt 错误。当我打电话给acos("$v1")(带引号)时,我没有。调用acos(1) 也不会产生错误。为什么引号很重要?
use strict;
use warnings 'all';
sub acos {
my $rad = shift;
return (atan2(sqrt(1 - $rad**2), $rad));
}
my $v1 = (0.520371764072297 * 0.520371764072297) +
(0.853939826425894 * 0.853939826425894 * 1);
print acos($v1); # Can't take sqrt of -8.88178e-16 at foo line 8.
print acos("$v1"); # 0
【问题讨论】:
标签: perl