我有一个整数数组(@BondLength),每个整数大约有 14 位:
1.4913648111713
1.49444103262725
1.49324445420032
1.49781641064584
1.49375901670919
1.48388476641551
1.49205194279556
1.48573550809019
1.48486531375745
1.48899462725693
1.48455818343371
1.49451162591664
1.49687975468973
1.48919777061343
1.48460466118088
我把它们作为“数据”字段,加上它们的“平均值”(我也成功地达到了 10 位)到一个子程序中:
sub stdev{
my($data) = @_;
my $average = $_;
if(@$data == 1){
return 0;
}
my $sqtotal = 0;
foreach(@$data) {
$sqtotal += ($average-$_) ** 2;
}
my $std = ($sqtotal / (@$data-1)) ** 0.5;
return $std;
}
但是当我用必要的参数调用这个子程序时:
my $stdev = &stdev(@BondLength, $average);
printf("\nThe standard deviation NCABondLength: $stdev");
我得到简单的“0”输出。我知道它的值大于零,直到小数点后十位,因为我将它输入到 Excel 中。我在这个脚本中做错了什么?(我现在通过阅读网上的东西来修改它太多了,但仍然保持“0”)。
谢谢。