#!/vol/gnu/bin/perl5.6 -w #!/usr/local/bin/perl -w #!/usr/bin/perl -w use strict; my $n='[0-9e\.\+\-]+'; # a number my $s='[ \t]'; # a separator my $x = 0.0; my $f = 0.0; my @x; my @f; my @fsym; my $l = 0; $x[1] = -1e10; my $eps = 1e-12; LINE: while (<STDIN>) { SWITCH: { /^\#/ && do { next LINE; }; /^$/ && do { next LINE; }; /^($s*)($n)($s+)($n)/ && do { $x = $2; $f = $4; if (abs($x) < $eps) { $x = 0.0; } if ($l == 0) { $l = 1; } else { if (abs($x[$l]-$x) > $eps) { $l++; } } $x[$l] = $x; $f[$l] = $f; next LINE; }; next LINE; }; }; my $z = 0; if (abs($l % 2) == 1) { $z = ($l+1)/2; } if (abs($l % 2) == 0) { $z = $l /2; } for (my $i=1; $i<=$z; $i++) { if (abs($x[$i] + $x[$l-$i+1]) > 1e-10) { die "Sorry, interval [", $x[1], ", ", $x[$l], "] seems not to be symmetric:\n", "i=", $i, " ", " ", $x[$i], " != ", $x[$l-$i+1], "\n"; } } for (my $i=1; $i<=$z; $i++) { $fsym[$i] = $fsym[$l-$i+1] = $f[$i] + $f[$l-$i+1]; } print "# Found $l values in [", $x[1], ", ", $x[$l], "].\n"; for (my $i=1; $i<=$l; $i++) { printf("%18.12f\t%18.12f\n", $x[$i], $fsym[$i]); }