gpt4 book ai didi

perl - 当我对引用变量和未引用变量进行数学运算时,为什么会得到不同的结果?

转载 作者:行者123 更新时间:2023-12-04 05:36:45 24 4
gpt4 key购买 nike

我正在使用纬度和经度来确定营业地点并遇到了一些奇怪的行为。

在下面的 Perl 片段中,将数据分配给 $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

最佳答案

$v1不完全是 1:

$ perl -e'
$v1 = (0.520371764072297 * 0.520371764072297) +
(0.853939826425894 * 0.853939826425894 * 1);
printf "%.16f\n", $v1
'
1.0000000000000004

但是,当您对其进行字符串化时, Perl only keeps 15 digits of precision :
$ perl -MDevel::Peek -e'
$v1 = (0.520371764072297 * 0.520371764072297) +
(0.853939826425894 * 0.853939826425894 * 1);
Dump "$v1"
'
SV = PV(0x2345090) at 0x235a738
REFCNT = 1
FLAGS = (PADTMP,POK,pPOK)
PV = 0x2353980 "1"\0 # string value is exactly 1
CUR = 1
LEN = 16

关于perl - 当我对引用变量和未引用变量进行数学运算时,为什么会得到不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41385456/

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