1
我有一個整數,每個約14個數字的陣列(@BondLength):問題與數字在Perl
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」)。
謝謝。
總是使用'use strict;使用警告;'! – ikegami
改變你的第二和第三行。 '我的($ data,$ average)= @ _'並確保你在子程序調用'&stdev(\ @ BondLength,$ average)'中傳遞一個數組引用。請參閱我的答案以獲取示例代碼。 –