note
BillKSmith
Your program would be much simpler if you reversed the order of your subscripts. Each column of your data is a set of data. It is convenient to have each set stored as its own array.
<c>
use strict;
use warnings;
use List::Util qw(sum);
my @raw;
my $n;
while (my $line = <DATA>) {
my @cols = split / /, $line;
foreach my $j (0..$#cols) {
push @{$raw[$j]}, $cols[$j];
}
}
{
local $, = ' ';
print process_column($_), "\n" foreach @raw;
}
sub process_column {
my @x = @{$_[0]};
my $n = @x;
my $x_tot = sum( @x );
my @x_jack = map { ($x_tot - $_) / ($n - 1) } @x;
my $g_jack_av;
my $g_jack_err;
#foreach my $dg (@x) {
foreach my $dg (@x_jack) { #UPDATE
$g_jack_av += $dg;
$g_jack_err += $dg**2;
}
$g_jack_av /= $n;
$g_jack_err /= $n;
$g_jack_err = sqrt(($n-1)*abs($g_jack_err-$g_jack_av**2));
return ($g_jack_av, $g_jack_err);
}
__DATA__
1.1 2.1 3.1 4.1
1.2 2.2 3.2 4.2
1.3 2.3 3.3 4.3
1.4 2.4 3.4 4.4
</c>
<p>OUTPUT</p>
<c>
1.25 0.193649167310372
2.25 0.193649167310365
3.25 0.193649167310338
4.25 0.193649167310365
</c>
<p>OUTPUT (with correction)</p>
<c>
1.25 0.064549722436785
2.25 0.0645497224367747
3.25 0.0645497224367334
4.25 0.064549722436816
</c>
<p>
UPDATE: Corrected error reported by [AnomalousMonk] in [id://11125262]
</p>
<!-- Node text goes above. Div tags should contain sig only -->
<div class="pmsig"><div class="pmsig-957973">
Bill
</div></div>
11125219
11125219