1*f2a19305Safresh1#!./perl 2*f2a19305Safresh1 3*f2a19305Safresh1# 4*f2a19305Safresh1# Regression tests for the Math::Complex pacakge 5*f2a19305Safresh1# -- Raphael Manfredi since Sep 1996 6*f2a19305Safresh1# -- Jarkko Hietaniemi since Mar 1997 7*f2a19305Safresh1# -- Daniel S. Lewart since Sep 1997 8*f2a19305Safresh1 9*f2a19305Safresh1use strict; 10*f2a19305Safresh1use warnings; 11*f2a19305Safresh1 12*f2a19305Safresh1use Math::Complex 1.54; 13*f2a19305Safresh1 14*f2a19305Safresh1# they are used later in the test and not exported by Math::Complex 15*f2a19305Safresh1*_stringify_cartesian = \&Math::Complex::_stringify_cartesian; 16*f2a19305Safresh1*_stringify_polar = \&Math::Complex::_stringify_polar; 17*f2a19305Safresh1 18*f2a19305Safresh1our $vax_float = (pack("d",1) =~ /^[\x80\x10]\x40/); 19*f2a19305Safresh1our $has_inf = !$vax_float; 20*f2a19305Safresh1 21*f2a19305Safresh1my ($args, $op, $target, $test, $test_set, $try, $val, $zvalue, @set, @val); 22*f2a19305Safresh1my ($bad, $z); 23*f2a19305Safresh1 24*f2a19305Safresh1$test = 0; 25*f2a19305Safresh1$| = 1; 26*f2a19305Safresh1my @script = ( 27*f2a19305Safresh1 'my ($res, $s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7,$s8,$s9,$s10,$z0,$z1,$z2);' . 28*f2a19305Safresh1 "\n\n" 29*f2a19305Safresh1); 30*f2a19305Safresh1my $eps = 1e-13; 31*f2a19305Safresh1 32*f2a19305Safresh1if ($^O eq 'unicos') { # For some reason root() produces very inaccurate 33*f2a19305Safresh1 $eps = 1e-10; # results in Cray UNICOS, and occasionally also 34*f2a19305Safresh1} # cos(), sin(), cosh(), sinh(). The division 35*f2a19305Safresh1 # of doubles is the current suspect. 36*f2a19305Safresh1 37*f2a19305Safresh1$test++; 38*f2a19305Safresh1push @script, "{ my \$t=$test; ".q{ 39*f2a19305Safresh1 my $a = Math::Complex->new(1); 40*f2a19305Safresh1 my $b = $a; 41*f2a19305Safresh1 $a += 2; 42*f2a19305Safresh1 print "not " unless "$a" eq "3" && "$b" eq "1"; 43*f2a19305Safresh1 print "ok $t\n"; 44*f2a19305Safresh1}."}"; 45*f2a19305Safresh1 46*f2a19305Safresh1while (<DATA>) { 47*f2a19305Safresh1 s/^\s+//; 48*f2a19305Safresh1 next if $_ eq '' || /^\#/; 49*f2a19305Safresh1 chomp; 50*f2a19305Safresh1 $test_set = 0; # Assume not a test over a set of values 51*f2a19305Safresh1 if (/^&(.+)/) { 52*f2a19305Safresh1 $op = $1; 53*f2a19305Safresh1 next; 54*f2a19305Safresh1 } 55*f2a19305Safresh1 elsif (/^\{(.+)\}/) { 56*f2a19305Safresh1 set($1, \@set, \@val); 57*f2a19305Safresh1 next; 58*f2a19305Safresh1 } 59*f2a19305Safresh1 elsif (s/^\|//) { 60*f2a19305Safresh1 $test_set = 1; # Requests we loop over the set... 61*f2a19305Safresh1 } 62*f2a19305Safresh1 my @args = split(/:/); 63*f2a19305Safresh1 if ($test_set == 1) { 64*f2a19305Safresh1 my $i; 65*f2a19305Safresh1 for ($i = 0; $i < @set; $i++) { 66*f2a19305Safresh1 # complex number 67*f2a19305Safresh1 $target = $set[$i]; 68*f2a19305Safresh1 # textual value as found in set definition 69*f2a19305Safresh1 $zvalue = $val[$i]; 70*f2a19305Safresh1 test($zvalue, $target, @args); 71*f2a19305Safresh1 } 72*f2a19305Safresh1 } else { 73*f2a19305Safresh1 test($op, undef, @args); 74*f2a19305Safresh1 } 75*f2a19305Safresh1} 76*f2a19305Safresh1 77*f2a19305Safresh1# 78*f2a19305Safresh1 79*f2a19305Safresh1sub test_mutators { 80*f2a19305Safresh1 my $op; 81*f2a19305Safresh1 82*f2a19305Safresh1 $test++; 83*f2a19305Safresh1push(@script, <<'EOT'); 84*f2a19305Safresh1{ 85*f2a19305Safresh1 my $z = cplx( 1, 1); 86*f2a19305Safresh1 $z->Re(2); 87*f2a19305Safresh1 $z->Im(3); 88*f2a19305Safresh1 print "# $test Re(z) = ",$z->Re(), " Im(z) = ", $z->Im(), " z = $z\n"; 89*f2a19305Safresh1 print 'not ' unless Re($z) == 2 and Im($z) == 3; 90*f2a19305Safresh1EOT 91*f2a19305Safresh1 push(@script, qq(print "ok $test\\n"}\n)); 92*f2a19305Safresh1 93*f2a19305Safresh1 $test++; 94*f2a19305Safresh1push(@script, <<'EOT'); 95*f2a19305Safresh1{ 96*f2a19305Safresh1 my $z = cplx( 1, 1); 97*f2a19305Safresh1 $z->abs(3 * sqrt(2)); 98*f2a19305Safresh1 print "# $test Re(z) = ",$z->Re(), " Im(z) = ", $z->Im(), " z = $z\n"; 99*f2a19305Safresh1 print 'not ' unless (abs($z) - 3 * sqrt(2)) < $eps and 100*f2a19305Safresh1 (arg($z) - pi / 4 ) < $eps and 101*f2a19305Safresh1 (Re($z) - 3 ) < $eps and 102*f2a19305Safresh1 (Im($z) - 3 ) < $eps; 103*f2a19305Safresh1EOT 104*f2a19305Safresh1 push(@script, qq(print "ok $test\\n"}\n)); 105*f2a19305Safresh1 106*f2a19305Safresh1 $test++; 107*f2a19305Safresh1push(@script, <<'EOT'); 108*f2a19305Safresh1{ 109*f2a19305Safresh1 my $z = cplx( 1, 1); 110*f2a19305Safresh1 $z->arg(-3 / 4 * pi); 111*f2a19305Safresh1 print "# $test Re(z) = ",$z->Re(), " Im(z) = ", $z->Im(), " z = $z\n"; 112*f2a19305Safresh1 print 'not ' unless (arg($z) + 3 / 4 * pi) < $eps and 113*f2a19305Safresh1 (abs($z) - sqrt(2) ) < $eps and 114*f2a19305Safresh1 (Re($z) + 1 ) < $eps and 115*f2a19305Safresh1 (Im($z) + 1 ) < $eps; 116*f2a19305Safresh1EOT 117*f2a19305Safresh1 push(@script, qq(print "ok $test\\n"}\n)); 118*f2a19305Safresh1} 119*f2a19305Safresh1 120*f2a19305Safresh1test_mutators(); 121*f2a19305Safresh1 122*f2a19305Safresh1my $constants = ' 123*f2a19305Safresh1my $i = cplx(0, 1); 124*f2a19305Safresh1my $pi = cplx(pi, 0); 125*f2a19305Safresh1my $pii = cplx(0, pi); 126*f2a19305Safresh1my $pip2 = cplx(pi/2, 0); 127*f2a19305Safresh1my $pip4 = cplx(pi/4, 0); 128*f2a19305Safresh1my $zero = cplx(0, 0); 129*f2a19305Safresh1'; 130*f2a19305Safresh1 131*f2a19305Safresh1if ($has_inf) { 132*f2a19305Safresh1 $constants .= <<'EOF'; 133*f2a19305Safresh1my $inf = 9**9**9; 134*f2a19305Safresh1EOF 135*f2a19305Safresh1} 136*f2a19305Safresh1 137*f2a19305Safresh1push(@script, $constants); 138*f2a19305Safresh1 139*f2a19305Safresh1 140*f2a19305Safresh1# test the divbyzeros 141*f2a19305Safresh1 142*f2a19305Safresh1sub test_dbz { 143*f2a19305Safresh1 for my $op (@_) { 144*f2a19305Safresh1 $test++; 145*f2a19305Safresh1 push(@script, <<EOT); 146*f2a19305Safresh1 eval '$op'; 147*f2a19305Safresh1 (\$bad) = (\$@ =~ /(.+)/); 148*f2a19305Safresh1 print "# $test op = $op divbyzero? \$bad...\n"; 149*f2a19305Safresh1 print 'not ' unless (\$@ =~ /Division by zero/); 150*f2a19305Safresh1EOT 151*f2a19305Safresh1 push(@script, qq(print "ok $test\\n";\n)); 152*f2a19305Safresh1 } 153*f2a19305Safresh1} 154*f2a19305Safresh1 155*f2a19305Safresh1# test the logofzeros 156*f2a19305Safresh1 157*f2a19305Safresh1sub test_loz { 158*f2a19305Safresh1 for my $op (@_) { 159*f2a19305Safresh1 $test++; 160*f2a19305Safresh1 push(@script, <<EOT); 161*f2a19305Safresh1 eval '$op'; 162*f2a19305Safresh1 (\$bad) = (\$@ =~ /(.+)/); 163*f2a19305Safresh1 print "# $test op = $op logofzero? \$bad...\n"; 164*f2a19305Safresh1 print 'not ' unless (\$@ =~ /Logarithm of zero/); 165*f2a19305Safresh1EOT 166*f2a19305Safresh1 push(@script, qq(print "ok $test\\n";\n)); 167*f2a19305Safresh1 } 168*f2a19305Safresh1} 169*f2a19305Safresh1 170*f2a19305Safresh1test_dbz( 171*f2a19305Safresh1 'i/0', 172*f2a19305Safresh1 'acot(0)', 173*f2a19305Safresh1 'acot(+$i)', 174*f2a19305Safresh1# 'acoth(-1)', # Log of zero. 175*f2a19305Safresh1 'acoth(0)', 176*f2a19305Safresh1 'acoth(+1)', 177*f2a19305Safresh1 'acsc(0)', 178*f2a19305Safresh1 'acsch(0)', 179*f2a19305Safresh1 'asec(0)', 180*f2a19305Safresh1 'asech(0)', 181*f2a19305Safresh1 'atan($i)', 182*f2a19305Safresh1# 'atanh(-1)', # Log of zero. 183*f2a19305Safresh1 'atanh(+1)', 184*f2a19305Safresh1 'cot(0)', 185*f2a19305Safresh1 'coth(0)', 186*f2a19305Safresh1 'csc(0)', 187*f2a19305Safresh1 'csch(0)', 188*f2a19305Safresh1 'atan(cplx(0, 1), cplx(1, 0))', 189*f2a19305Safresh1 ); 190*f2a19305Safresh1 191*f2a19305Safresh1test_loz( 192*f2a19305Safresh1 'log($zero)', 193*f2a19305Safresh1 'atan(-$i)', 194*f2a19305Safresh1 'acot(-$i)', 195*f2a19305Safresh1 'atanh(-1)', 196*f2a19305Safresh1 'acoth(-1)', 197*f2a19305Safresh1 ); 198*f2a19305Safresh1 199*f2a19305Safresh1# test the bad roots 200*f2a19305Safresh1 201*f2a19305Safresh1sub test_broot { 202*f2a19305Safresh1 for my $op (@_) { 203*f2a19305Safresh1 $test++; 204*f2a19305Safresh1 push(@script, <<EOT); 205*f2a19305Safresh1 eval 'root(2, $op)'; 206*f2a19305Safresh1 (\$bad) = (\$@ =~ /(.+)/); 207*f2a19305Safresh1 print "# $test op = $op badroot? \$bad...\n"; 208*f2a19305Safresh1 print 'not ' unless (\$@ =~ /root rank must be/); 209*f2a19305Safresh1EOT 210*f2a19305Safresh1 push(@script, qq(print "ok $test\\n";\n)); 211*f2a19305Safresh1 } 212*f2a19305Safresh1} 213*f2a19305Safresh1 214*f2a19305Safresh1test_broot(qw(-3 -2.1 0 0.99)); 215*f2a19305Safresh1 216*f2a19305Safresh1sub test_display_format { 217*f2a19305Safresh1 $test++; 218*f2a19305Safresh1 push @script, <<EOS; 219*f2a19305Safresh1 print "# package display_format cartesian?\n"; 220*f2a19305Safresh1 print "not " unless Math::Complex->display_format eq 'cartesian'; 221*f2a19305Safresh1 print "ok $test\n"; 222*f2a19305Safresh1EOS 223*f2a19305Safresh1 224*f2a19305Safresh1 push @script, <<EOS; 225*f2a19305Safresh1 my \$j = (root(1,3))[1]; 226*f2a19305Safresh1 227*f2a19305Safresh1 \$j->display_format('polar'); 228*f2a19305Safresh1EOS 229*f2a19305Safresh1 230*f2a19305Safresh1 $test++; 231*f2a19305Safresh1 push @script, <<EOS; 232*f2a19305Safresh1 print "# j display_format polar?\n"; 233*f2a19305Safresh1 print "not " unless \$j->display_format eq 'polar'; 234*f2a19305Safresh1 print "ok $test\n"; 235*f2a19305Safresh1EOS 236*f2a19305Safresh1 237*f2a19305Safresh1 $test++; 238*f2a19305Safresh1 push @script, <<EOS; 239*f2a19305Safresh1 print "# j = \$j\n"; 240*f2a19305Safresh1 print "not " unless "\$j" eq "[1,2pi/3]"; 241*f2a19305Safresh1 print "ok $test\n"; 242*f2a19305Safresh1 243*f2a19305Safresh1 my %display_format; 244*f2a19305Safresh1 245*f2a19305Safresh1 %display_format = \$j->display_format; 246*f2a19305Safresh1EOS 247*f2a19305Safresh1 248*f2a19305Safresh1 $test++; 249*f2a19305Safresh1 push @script, <<EOS; 250*f2a19305Safresh1 print "# display_format{style} polar?\n"; 251*f2a19305Safresh1 print "not " unless \$display_format{style} eq 'polar'; 252*f2a19305Safresh1 print "ok $test\n"; 253*f2a19305Safresh1EOS 254*f2a19305Safresh1 255*f2a19305Safresh1 $test++; 256*f2a19305Safresh1 push @script, <<EOS; 257*f2a19305Safresh1 print "# keys %display_format == 2?\n"; 258*f2a19305Safresh1 print "not " unless keys %display_format == 2; 259*f2a19305Safresh1 print "ok $test\n"; 260*f2a19305Safresh1 261*f2a19305Safresh1 \$j->display_format('style' => 'cartesian', 'format' => '%.5f'); 262*f2a19305Safresh1EOS 263*f2a19305Safresh1 264*f2a19305Safresh1 $test++; 265*f2a19305Safresh1 push @script, <<EOS; 266*f2a19305Safresh1 print "# j = \$j\n"; 267*f2a19305Safresh1 print "not " unless "\$j" eq "-0.50000+0.86603i"; 268*f2a19305Safresh1 print "ok $test\n"; 269*f2a19305Safresh1 270*f2a19305Safresh1 %display_format = \$j->display_format; 271*f2a19305Safresh1EOS 272*f2a19305Safresh1 273*f2a19305Safresh1 $test++; 274*f2a19305Safresh1 push @script, <<EOS; 275*f2a19305Safresh1 print "# display_format{format} %.5f?\n"; 276*f2a19305Safresh1 print "not " unless \$display_format{format} eq '%.5f'; 277*f2a19305Safresh1 print "ok $test\n"; 278*f2a19305Safresh1EOS 279*f2a19305Safresh1 280*f2a19305Safresh1 $test++; 281*f2a19305Safresh1 push @script, <<EOS; 282*f2a19305Safresh1 print "# keys %display_format == 3?\n"; 283*f2a19305Safresh1 print "not " unless keys %display_format == 3; 284*f2a19305Safresh1 print "ok $test\n"; 285*f2a19305Safresh1 286*f2a19305Safresh1 \$j->display_format('format' => undef); 287*f2a19305Safresh1EOS 288*f2a19305Safresh1 289*f2a19305Safresh1 $test++; 290*f2a19305Safresh1 push @script, <<EOS; 291*f2a19305Safresh1 print "# j = \$j\n"; 292*f2a19305Safresh1 print "not " unless "\$j" =~ /^-0(?:\\.5(?:0000\\d+)?|\\.49999\\d+)\\+0.86602540\\d+i\$/; 293*f2a19305Safresh1 print "ok $test\n"; 294*f2a19305Safresh1 295*f2a19305Safresh1 \$j->display_format('style' => 'polar', 'polar_pretty_print' => 0); 296*f2a19305Safresh1EOS 297*f2a19305Safresh1 298*f2a19305Safresh1 $test++; 299*f2a19305Safresh1 push @script, <<EOS; 300*f2a19305Safresh1 print "# j = \$j\n"; 301*f2a19305Safresh1 print "not " unless "\$j" =~ /^\\[1,2\\.09439510\\d+\\]\$/; 302*f2a19305Safresh1 print "ok $test\n"; 303*f2a19305Safresh1 304*f2a19305Safresh1 \$j->display_format('style' => 'polar', 'format' => "%.4g"); 305*f2a19305Safresh1EOS 306*f2a19305Safresh1 307*f2a19305Safresh1 $test++; 308*f2a19305Safresh1 push @script, <<EOS; 309*f2a19305Safresh1 print "# j = \$j\n"; 310*f2a19305Safresh1 print "not " unless "\$j" =~ /^\\[1,2\\.094\\]\$/; 311*f2a19305Safresh1 print "ok $test\n"; 312*f2a19305Safresh1 313*f2a19305Safresh1 \$j->display_format('style' => 'cartesian', 'format' => '(%.5g)'); 314*f2a19305Safresh1EOS 315*f2a19305Safresh1 316*f2a19305Safresh1 $test++; 317*f2a19305Safresh1 push @script, <<EOS; 318*f2a19305Safresh1 print "# j = \$j\n"; 319*f2a19305Safresh1 print "not " unless "\$j" eq "(-0.5)+(0.86603)i"; 320*f2a19305Safresh1 print "ok $test\n"; 321*f2a19305Safresh1EOS 322*f2a19305Safresh1 323*f2a19305Safresh1 $test++; 324*f2a19305Safresh1 push @script, <<EOS; 325*f2a19305Safresh1 print "# j display_format cartesian?\n"; 326*f2a19305Safresh1 print "not " unless \$j->display_format eq 'cartesian'; 327*f2a19305Safresh1 print "ok $test\n"; 328*f2a19305Safresh1EOS 329*f2a19305Safresh1} 330*f2a19305Safresh1 331*f2a19305Safresh1test_display_format(); 332*f2a19305Safresh1 333*f2a19305Safresh1sub test_remake { 334*f2a19305Safresh1 $test++; 335*f2a19305Safresh1 push @script, <<EOS; 336*f2a19305Safresh1 print "# remake 2+3i\n"; 337*f2a19305Safresh1 \$z = cplx('2+3i'); 338*f2a19305Safresh1 print "not " unless \$z == Math::Complex->make(2,3); 339*f2a19305Safresh1 print "ok $test\n"; 340*f2a19305Safresh1EOS 341*f2a19305Safresh1 342*f2a19305Safresh1 $test++; 343*f2a19305Safresh1 push @script, <<EOS; 344*f2a19305Safresh1 print "# make 3i\n"; 345*f2a19305Safresh1 \$z = Math::Complex->make('3i'); 346*f2a19305Safresh1 print "not " unless \$z == cplx(0,3); 347*f2a19305Safresh1 print "ok $test\n"; 348*f2a19305Safresh1EOS 349*f2a19305Safresh1 350*f2a19305Safresh1 $test++; 351*f2a19305Safresh1 push @script, <<EOS; 352*f2a19305Safresh1 print "# emake [2,3]\n"; 353*f2a19305Safresh1 \$z = Math::Complex->emake('[2,3]'); 354*f2a19305Safresh1 print "not " unless \$z == cplxe(2,3); 355*f2a19305Safresh1 print "ok $test\n"; 356*f2a19305Safresh1EOS 357*f2a19305Safresh1 358*f2a19305Safresh1 $test++; 359*f2a19305Safresh1 push @script, <<EOS; 360*f2a19305Safresh1 print "# make (2,3)\n"; 361*f2a19305Safresh1 \$z = Math::Complex->make('(2,3)'); 362*f2a19305Safresh1 print "not " unless \$z == cplx(2,3); 363*f2a19305Safresh1 print "ok $test\n"; 364*f2a19305Safresh1EOS 365*f2a19305Safresh1 366*f2a19305Safresh1 $test++; 367*f2a19305Safresh1 push @script, <<EOS; 368*f2a19305Safresh1 print "# emake [2,3pi/8]\n"; 369*f2a19305Safresh1 \$z = Math::Complex->emake('[2,3pi/8]'); 370*f2a19305Safresh1 print "not " unless \$z == cplxe(2,3*\$pi/8); 371*f2a19305Safresh1 print "ok $test\n"; 372*f2a19305Safresh1EOS 373*f2a19305Safresh1 374*f2a19305Safresh1 $test++; 375*f2a19305Safresh1 push @script, <<EOS; 376*f2a19305Safresh1 print "# emake [2]\n"; 377*f2a19305Safresh1 \$z = Math::Complex->emake('[2]'); 378*f2a19305Safresh1 print "not " unless \$z == cplxe(2); 379*f2a19305Safresh1 print "ok $test\n"; 380*f2a19305Safresh1EOS 381*f2a19305Safresh1} 382*f2a19305Safresh1 383*f2a19305Safresh1sub test_no_args { 384*f2a19305Safresh1 push @script, <<'EOS'; 385*f2a19305Safresh1{ 386*f2a19305Safresh1 print "# cplx, cplxe, make, emake without arguments\n"; 387*f2a19305Safresh1EOS 388*f2a19305Safresh1 389*f2a19305Safresh1 $test++; 390*f2a19305Safresh1 push @script, <<EOS; 391*f2a19305Safresh1 my \$z0 = cplx(); 392*f2a19305Safresh1 print ((\$z0->Re() == 0) ? "ok $test\n" : "not ok $test\n"); 393*f2a19305Safresh1EOS 394*f2a19305Safresh1 395*f2a19305Safresh1 $test++; 396*f2a19305Safresh1 push @script, <<EOS; 397*f2a19305Safresh1 print ((\$z0->Im() == 0) ? "ok $test\n" : "not ok $test\n"); 398*f2a19305Safresh1EOS 399*f2a19305Safresh1 400*f2a19305Safresh1 $test++; 401*f2a19305Safresh1 push @script, <<EOS; 402*f2a19305Safresh1 my \$z1 = cplxe(); 403*f2a19305Safresh1 print ((\$z1->rho() == 0) ? "ok $test\n" : "not ok $test\n"); 404*f2a19305Safresh1EOS 405*f2a19305Safresh1 406*f2a19305Safresh1 $test++; 407*f2a19305Safresh1 push @script, <<EOS; 408*f2a19305Safresh1 print ((\$z1->theta() == 0) ? "ok $test\n" : "not ok $test\n"); 409*f2a19305Safresh1EOS 410*f2a19305Safresh1 411*f2a19305Safresh1 $test++; 412*f2a19305Safresh1 push @script, <<EOS; 413*f2a19305Safresh1 my \$z2 = Math::Complex->make(); 414*f2a19305Safresh1 print ((\$z2->Re() == 0) ? "ok $test\n" : "not ok $test\n"); 415*f2a19305Safresh1EOS 416*f2a19305Safresh1 417*f2a19305Safresh1 $test++; 418*f2a19305Safresh1 push @script, <<EOS; 419*f2a19305Safresh1 print ((\$z2->Im() == 0) ? "ok $test\n" : "not ok $test\n"); 420*f2a19305Safresh1EOS 421*f2a19305Safresh1 422*f2a19305Safresh1 $test++; 423*f2a19305Safresh1 push @script, <<EOS; 424*f2a19305Safresh1 my \$z3 = Math::Complex->emake(); 425*f2a19305Safresh1 print ((\$z3->rho() == 0) ? "ok $test\n" : "not ok $test\n"); 426*f2a19305Safresh1EOS 427*f2a19305Safresh1 428*f2a19305Safresh1 $test++; 429*f2a19305Safresh1 push @script, <<EOS; 430*f2a19305Safresh1 print ((\$z3->theta() == 0) ? "ok $test\n" : "not ok $test\n"); 431*f2a19305Safresh1} 432*f2a19305Safresh1EOS 433*f2a19305Safresh1} 434*f2a19305Safresh1 435*f2a19305Safresh1sub test_atan2 { 436*f2a19305Safresh1 push @script, <<'EOS'; 437*f2a19305Safresh1print "# atan2() with some real arguments\n"; 438*f2a19305Safresh1EOS 439*f2a19305Safresh1 my @real = (-1, 0, 1); 440*f2a19305Safresh1 for my $x (@real) { 441*f2a19305Safresh1 for my $y (@real) { 442*f2a19305Safresh1 next if $x == 0 && $y == 0; 443*f2a19305Safresh1 $test++; 444*f2a19305Safresh1 push @script, <<EOS; 445*f2a19305Safresh1print ((Math::Complex::atan2($y, $x) == CORE::atan2($y, $x)) ? "ok $test\n" : "not ok $test\n"); 446*f2a19305Safresh1EOS 447*f2a19305Safresh1 } 448*f2a19305Safresh1 } 449*f2a19305Safresh1 push @script, <<'EOS'; 450*f2a19305Safresh1 print "# atan2() with some complex arguments\n"; 451*f2a19305Safresh1EOS 452*f2a19305Safresh1 $test++; 453*f2a19305Safresh1 push @script, <<EOS; 454*f2a19305Safresh1 print (abs(atan2(0, cplx(0, 1))) < $eps ? "ok $test\n" : "not ok $test\n"); 455*f2a19305Safresh1EOS 456*f2a19305Safresh1 $test++; 457*f2a19305Safresh1 push @script, <<EOS; 458*f2a19305Safresh1 print (abs(atan2(cplx(0, 1), 0) - \$pip2) < $eps ? "ok $test\n" : "not ok $test\n"); 459*f2a19305Safresh1EOS 460*f2a19305Safresh1 $test++; 461*f2a19305Safresh1 push @script, <<EOS; 462*f2a19305Safresh1 print (abs(atan2(cplx(0, 1), cplx(0, 1)) - \$pip4) < $eps ? "ok $test\n" : "not ok $test\n"); 463*f2a19305Safresh1EOS 464*f2a19305Safresh1 $test++; 465*f2a19305Safresh1 push @script, <<EOS; 466*f2a19305Safresh1 print (abs(atan2(cplx(0, 1), cplx(1, 1)) - cplx(0.553574358897045, 0.402359478108525)) < $eps ? "ok $test\n" : "not ok $test\n"); 467*f2a19305Safresh1EOS 468*f2a19305Safresh1} 469*f2a19305Safresh1 470*f2a19305Safresh1sub test_decplx { 471*f2a19305Safresh1} 472*f2a19305Safresh1 473*f2a19305Safresh1test_remake(); 474*f2a19305Safresh1 475*f2a19305Safresh1test_no_args(); 476*f2a19305Safresh1 477*f2a19305Safresh1test_atan2(); 478*f2a19305Safresh1 479*f2a19305Safresh1test_decplx(); 480*f2a19305Safresh1 481*f2a19305Safresh1print "1..$test\n"; 482*f2a19305Safresh1#print @script, "\n"; 483*f2a19305Safresh1eval join '', @script; 484*f2a19305Safresh1die $@ if $@; 485*f2a19305Safresh1 486*f2a19305Safresh1sub abop { 487*f2a19305Safresh1 my ($op) = @_; 488*f2a19305Safresh1 489*f2a19305Safresh1 push(@script, qq(print "# $op=\n";)); 490*f2a19305Safresh1} 491*f2a19305Safresh1 492*f2a19305Safresh1sub test { 493*f2a19305Safresh1 my ($op, $z, @args) = @_; 494*f2a19305Safresh1 my ($baop) = 0; 495*f2a19305Safresh1 $test++; 496*f2a19305Safresh1 my $i; 497*f2a19305Safresh1 $baop = 1 if ($op =~ s/;=$//); 498*f2a19305Safresh1 for ($i = 0; $i < @args; $i++) { 499*f2a19305Safresh1 $val = value($args[$i]); 500*f2a19305Safresh1 push @script, "\$z$i = $val;\n"; 501*f2a19305Safresh1 } 502*f2a19305Safresh1 if (defined $z) { 503*f2a19305Safresh1 $args = "'$op'"; # Really the value 504*f2a19305Safresh1 $try = "abs(\$z0 - \$z1) <= $eps ? \$z1 : \$z0"; 505*f2a19305Safresh1 push @script, "\$res = $try; "; 506*f2a19305Safresh1 push @script, "check($test, $args[0], \$res, \$z$#args, $args);\n"; 507*f2a19305Safresh1 } else { 508*f2a19305Safresh1 my ($try, $args); 509*f2a19305Safresh1 if (@args == 2) { 510*f2a19305Safresh1 $try = "$op \$z0"; 511*f2a19305Safresh1 $args = "'$args[0]'"; 512*f2a19305Safresh1 } else { 513*f2a19305Safresh1 $try = ($op =~ /^\w/) ? "$op(\$z0, \$z1)" : "\$z0 $op \$z1"; 514*f2a19305Safresh1 $args = "'$args[0]', '$args[1]'"; 515*f2a19305Safresh1 } 516*f2a19305Safresh1 push @script, "\$res = $try; "; 517*f2a19305Safresh1 push @script, "check($test, '$try', \$res, \$z$#args, $args);\n"; 518*f2a19305Safresh1 if (@args > 2 and $baop) { # binary assignment ops 519*f2a19305Safresh1 $test++; 520*f2a19305Safresh1 # check the op= works 521*f2a19305Safresh1 push @script, <<EOB; 522*f2a19305Safresh1{ 523*f2a19305Safresh1 my \$za = cplx(ref \$z0 ? \@{\$z0->_cartesian} : (\$z0, 0)); 524*f2a19305Safresh1 525*f2a19305Safresh1 my (\$z1r, \$z1i) = ref \$z1 ? \@{\$z1->_cartesian} : (\$z1, 0); 526*f2a19305Safresh1 527*f2a19305Safresh1 my \$zb = cplx(\$z1r, \$z1i); 528*f2a19305Safresh1 529*f2a19305Safresh1 \$za $op= \$zb; 530*f2a19305Safresh1 my (\$zbr, \$zbi) = \@{\$zb->_cartesian}; 531*f2a19305Safresh1 532*f2a19305Safresh1 check($test, '\$z0 $op= \$z1', \$za, \$z$#args, $args); 533*f2a19305Safresh1EOB 534*f2a19305Safresh1 $test++; 535*f2a19305Safresh1 # check that the rhs has not changed 536*f2a19305Safresh1 push @script, qq(print "not " unless (\$zbr == \$z1r and \$zbi == \$z1i);); 537*f2a19305Safresh1 push @script, qq(print "ok $test\\n";\n); 538*f2a19305Safresh1 push @script, "}\n"; 539*f2a19305Safresh1 } 540*f2a19305Safresh1 } 541*f2a19305Safresh1} 542*f2a19305Safresh1 543*f2a19305Safresh1sub set { 544*f2a19305Safresh1 my ($set, $setref, $valref) = @_; 545*f2a19305Safresh1 @{$setref} = (); 546*f2a19305Safresh1 @{$valref} = (); 547*f2a19305Safresh1 my @set = split(/;\s*/, $set); 548*f2a19305Safresh1 my @res; 549*f2a19305Safresh1 my $i; 550*f2a19305Safresh1 for ($i = 0; $i < @set; $i++) { 551*f2a19305Safresh1 push(@{$valref}, $set[$i]); 552*f2a19305Safresh1 my $val = value($set[$i]); 553*f2a19305Safresh1 push @script, "\$s$i = $val;\n"; 554*f2a19305Safresh1 push @{$setref}, "\$s$i"; 555*f2a19305Safresh1 } 556*f2a19305Safresh1} 557*f2a19305Safresh1 558*f2a19305Safresh1sub value { 559*f2a19305Safresh1 local ($_) = @_; 560*f2a19305Safresh1 if (/^\s*\((.*),(.*)\)/) { 561*f2a19305Safresh1 return "cplx($1,$2)"; 562*f2a19305Safresh1 } 563*f2a19305Safresh1 elsif (/^\s*([\-\+]?(?:\d+(\.\d+)?|\.\d+)(?:[e[\-\+]\d+])?)/) { 564*f2a19305Safresh1 return "cplx($1,0)"; 565*f2a19305Safresh1 } 566*f2a19305Safresh1 elsif (/^\s*\[(.*),(.*)\]/) { 567*f2a19305Safresh1 return "cplxe($1,$2)"; 568*f2a19305Safresh1 } 569*f2a19305Safresh1 elsif (/^\s*'(.*)'/) { 570*f2a19305Safresh1 my $ex = $1; 571*f2a19305Safresh1 $ex =~ s/\bz\b/$target/g; 572*f2a19305Safresh1 $ex =~ s/\br\b/abs($target)/g; 573*f2a19305Safresh1 $ex =~ s/\bt\b/arg($target)/g; 574*f2a19305Safresh1 $ex =~ s/\ba\b/Re($target)/g; 575*f2a19305Safresh1 $ex =~ s/\bb\b/Im($target)/g; 576*f2a19305Safresh1 return $ex; 577*f2a19305Safresh1 } 578*f2a19305Safresh1 elsif (/^\s*"(.*)"/) { 579*f2a19305Safresh1 return "\"$1\""; 580*f2a19305Safresh1 } 581*f2a19305Safresh1 return $_; 582*f2a19305Safresh1} 583*f2a19305Safresh1 584*f2a19305Safresh1sub check { 585*f2a19305Safresh1 my ($test, $try, $got, $expected, @z) = @_; 586*f2a19305Safresh1 587*f2a19305Safresh1 print "# @_\n"; 588*f2a19305Safresh1 589*f2a19305Safresh1 if ("$got" eq "$expected" 590*f2a19305Safresh1 || 591*f2a19305Safresh1 ($expected =~ /^-?\d/ && $got == $expected) 592*f2a19305Safresh1 || 593*f2a19305Safresh1 (abs(Math::Complex->make($got) - Math::Complex->make($expected)) < $eps) 594*f2a19305Safresh1 || 595*f2a19305Safresh1 (abs($got - $expected) < $eps) 596*f2a19305Safresh1 ) { 597*f2a19305Safresh1 print "ok $test\n"; 598*f2a19305Safresh1 } else { 599*f2a19305Safresh1 print "not ok $test\n"; 600*f2a19305Safresh1 my $args = (@z == 1) ? "z = $z[0]" : "z0 = $z[0], z1 = $z[1]"; 601*f2a19305Safresh1 print "# '$try' expected: '$expected' got: '$got' for $args\n"; 602*f2a19305Safresh1 } 603*f2a19305Safresh1} 604*f2a19305Safresh1 605*f2a19305Safresh1sub addsq { 606*f2a19305Safresh1 my ($z1, $z2) = @_; 607*f2a19305Safresh1 return ($z1 + i*$z2) * ($z1 - i*$z2); 608*f2a19305Safresh1} 609*f2a19305Safresh1 610*f2a19305Safresh1sub subsq { 611*f2a19305Safresh1 my ($z1, $z2) = @_; 612*f2a19305Safresh1 return ($z1 + $z2) * ($z1 - $z2); 613*f2a19305Safresh1} 614*f2a19305Safresh1 615*f2a19305Safresh1__END__ 616*f2a19305Safresh1&+;= 617*f2a19305Safresh1(3,4):(3,4):(6,8) 618*f2a19305Safresh1(-3,4):(3,-4):(0,0) 619*f2a19305Safresh1(3,4):-3:(0,4) 620*f2a19305Safresh11:(4,2):(5,2) 621*f2a19305Safresh1[2,0]:[2,pi]:(0,0) 622*f2a19305Safresh1 623*f2a19305Safresh1&++ 624*f2a19305Safresh1(2,1):(3,1) 625*f2a19305Safresh1 626*f2a19305Safresh1&-;= 627*f2a19305Safresh1(2,3):(-2,-3) 628*f2a19305Safresh1[2,pi/2]:[2,-(pi)/2] 629*f2a19305Safresh12:[2,0]:(0,0) 630*f2a19305Safresh1[3,0]:2:(1,0) 631*f2a19305Safresh13:(4,5):(-1,-5) 632*f2a19305Safresh1(4,5):3:(1,5) 633*f2a19305Safresh1(2,1):(3,5):(-1,-4) 634*f2a19305Safresh1 635*f2a19305Safresh1&-- 636*f2a19305Safresh1(1,2):(0,2) 637*f2a19305Safresh1[2,pi]:[3,pi] 638*f2a19305Safresh1 639*f2a19305Safresh1&*;= 640*f2a19305Safresh1(0,1):(0,1):(-1,0) 641*f2a19305Safresh1(4,5):(1,0):(4,5) 642*f2a19305Safresh1[2,2*pi/3]:(1,0):[2,2*pi/3] 643*f2a19305Safresh12:(0,1):(0,2) 644*f2a19305Safresh1(0,1):3:(0,3) 645*f2a19305Safresh1(0,1):(4,1):(-1,4) 646*f2a19305Safresh1(2,1):(4,-1):(9,2) 647*f2a19305Safresh1 648*f2a19305Safresh1&/;= 649*f2a19305Safresh1(3,4):(3,4):(1,0) 650*f2a19305Safresh1(4,-5):1:(4,-5) 651*f2a19305Safresh11:(0,1):(0,-1) 652*f2a19305Safresh1(0,6):(0,2):(3,0) 653*f2a19305Safresh1(9,2):(4,-1):(2,1) 654*f2a19305Safresh1[4,pi]:[2,pi/2]:[2,pi/2] 655*f2a19305Safresh1[2,pi/2]:[4,pi]:[0.5,-(pi)/2] 656*f2a19305Safresh1 657*f2a19305Safresh1&**;= 658*f2a19305Safresh1(2,0):(3,0):(8,0) 659*f2a19305Safresh1(3,0):(2,0):(9,0) 660*f2a19305Safresh1(2,3):(4,0):(-119,-120) 661*f2a19305Safresh1(0,0):(1,0):(0,0) 662*f2a19305Safresh1(0,0):(2,3):(0,0) 663*f2a19305Safresh1(1,0):(0,0):(1,0) 664*f2a19305Safresh1(1,0):(1,0):(1,0) 665*f2a19305Safresh1(1,0):(2,3):(1,0) 666*f2a19305Safresh1(2,3):(0,0):(1,0) 667*f2a19305Safresh1(2,3):(1,0):(2,3) 668*f2a19305Safresh1(0,0):(0,0):(1,0) 669*f2a19305Safresh1 670*f2a19305Safresh1&Re 671*f2a19305Safresh1(3,4):3 672*f2a19305Safresh1(-3,4):-3 673*f2a19305Safresh1[1,pi/2]:0 674*f2a19305Safresh1 675*f2a19305Safresh1&Im 676*f2a19305Safresh1(3,4):4 677*f2a19305Safresh1(3,-4):-4 678*f2a19305Safresh1[1,pi/2]:1 679*f2a19305Safresh1 680*f2a19305Safresh1&abs 681*f2a19305Safresh1(3,4):5 682*f2a19305Safresh1(-3,4):5 683*f2a19305Safresh1 684*f2a19305Safresh1&arg 685*f2a19305Safresh1[2,0]:0 686*f2a19305Safresh1[-2,0]:pi 687*f2a19305Safresh1 688*f2a19305Safresh1&~ 689*f2a19305Safresh1(4,5):(4,-5) 690*f2a19305Safresh1(-3,4):(-3,-4) 691*f2a19305Safresh1[2,pi/2]:[2,-(pi)/2] 692*f2a19305Safresh1 693*f2a19305Safresh1&< 694*f2a19305Safresh1(3,4):(1,2):0 695*f2a19305Safresh1(3,4):(3,2):0 696*f2a19305Safresh1(3,4):(3,8):1 697*f2a19305Safresh1(4,4):(5,129):1 698*f2a19305Safresh1 699*f2a19305Safresh1&== 700*f2a19305Safresh1(3,4):(4,5):0 701*f2a19305Safresh1(3,4):(3,5):0 702*f2a19305Safresh1(3,4):(2,4):0 703*f2a19305Safresh1(3,4):(3,4):1 704*f2a19305Safresh1 705*f2a19305Safresh1&sqrt 706*f2a19305Safresh1-9:(0,3) 707*f2a19305Safresh1(-100,0):(0,10) 708*f2a19305Safresh1(16,-30):(5,-3) 709*f2a19305Safresh1 710*f2a19305Safresh1&_stringify_cartesian 711*f2a19305Safresh1(-100,0):"-100" 712*f2a19305Safresh1(0,1):"i" 713*f2a19305Safresh1(4,-3):"4-3i" 714*f2a19305Safresh1(4,0):"4" 715*f2a19305Safresh1(-4,0):"-4" 716*f2a19305Safresh1(-2,4):"-2+4i" 717*f2a19305Safresh1(-2,-1):"-2-i" 718*f2a19305Safresh1 719*f2a19305Safresh1&_stringify_polar 720*f2a19305Safresh1[-1, 0]:"[1,pi]" 721*f2a19305Safresh1[1, pi/3]:"[1,pi/3]" 722*f2a19305Safresh1[6, -2*pi/3]:"[6,-2pi/3]" 723*f2a19305Safresh1[0.5, -9*pi/11]:"[0.5,-9pi/11]" 724*f2a19305Safresh1[1, 0.5]:"[1, 0.5]" 725*f2a19305Safresh1 726*f2a19305Safresh1{ (4,3); [3,2]; (-3,4); (0,2); [2,1] } 727*f2a19305Safresh1 728*f2a19305Safresh1|'z + ~z':'2*Re(z)' 729*f2a19305Safresh1|'z - ~z':'2*i*Im(z)' 730*f2a19305Safresh1|'z * ~z':'abs(z) * abs(z)' 731*f2a19305Safresh1 732*f2a19305Safresh1{ (0.5, 0); (-0.5, 0); (2,3); [3,2]; (-3,2); (0,2); 3; 1.2; (-3, 0); (-2, -1); [2,1] } 733*f2a19305Safresh1 734*f2a19305Safresh1|'(root(z, 4))[1] ** 4':'z' 735*f2a19305Safresh1|'(root(z, 5))[3] ** 5':'z' 736*f2a19305Safresh1|'(root(z, 8))[7] ** 8':'z' 737*f2a19305Safresh1|'(root(z, 8, 0)) ** 8':'z' 738*f2a19305Safresh1|'(root(z, 8, 7)) ** 8':'z' 739*f2a19305Safresh1|'abs(z)':'r' 740*f2a19305Safresh1|'acot(z)':'acotan(z)' 741*f2a19305Safresh1|'acsc(z)':'acosec(z)' 742*f2a19305Safresh1|'acsc(z)':'asin(1 / z)' 743*f2a19305Safresh1|'asec(z)':'acos(1 / z)' 744*f2a19305Safresh1|'cbrt(z)':'cbrt(r) * exp(i * t/3)' 745*f2a19305Safresh1|'cos(acos(z))':'z' 746*f2a19305Safresh1|'addsq(cos(z), sin(z))':1 747*f2a19305Safresh1|'cos(z)':'cosh(i*z)' 748*f2a19305Safresh1|'subsq(cosh(z), sinh(z))':1 749*f2a19305Safresh1|'cot(acot(z))':'z' 750*f2a19305Safresh1|'cot(z)':'1 / tan(z)' 751*f2a19305Safresh1|'cot(z)':'cotan(z)' 752*f2a19305Safresh1|'csc(acsc(z))':'z' 753*f2a19305Safresh1|'csc(z)':'1 / sin(z)' 754*f2a19305Safresh1|'csc(z)':'cosec(z)' 755*f2a19305Safresh1|'exp(log(z))':'z' 756*f2a19305Safresh1|'exp(z)':'exp(a) * exp(i * b)' 757*f2a19305Safresh1|'ln(z)':'log(z)' 758*f2a19305Safresh1|'log(exp(z))':'z' 759*f2a19305Safresh1|'log(z)':'log(r) + i*t' 760*f2a19305Safresh1|'log10(z)':'log(z) / log(10)' 761*f2a19305Safresh1|'logn(z, 2)':'log(z) / log(2)' 762*f2a19305Safresh1|'logn(z, 3)':'log(z) / log(3)' 763*f2a19305Safresh1|'sec(asec(z))':'z' 764*f2a19305Safresh1|'sec(z)':'1 / cos(z)' 765*f2a19305Safresh1|'sin(asin(z))':'z' 766*f2a19305Safresh1|'sin(i * z)':'i * sinh(z)' 767*f2a19305Safresh1|'sqrt(z) * sqrt(z)':'z' 768*f2a19305Safresh1|'sqrt(z)':'sqrt(r) * exp(i * t/2)' 769*f2a19305Safresh1|'tan(atan(z))':'z' 770*f2a19305Safresh1|'z**z':'exp(z * log(z))' 771*f2a19305Safresh1 772*f2a19305Safresh1{ (1,1); [1,0.5]; (-2, -1); 2; -3; (-1,0.5); (0,0.5); 0.5; (2, 0); (-1, -2) } 773*f2a19305Safresh1 774*f2a19305Safresh1|'cosh(acosh(z))':'z' 775*f2a19305Safresh1|'coth(acoth(z))':'z' 776*f2a19305Safresh1|'coth(z)':'1 / tanh(z)' 777*f2a19305Safresh1|'coth(z)':'cotanh(z)' 778*f2a19305Safresh1|'csch(acsch(z))':'z' 779*f2a19305Safresh1|'csch(z)':'1 / sinh(z)' 780*f2a19305Safresh1|'csch(z)':'cosech(z)' 781*f2a19305Safresh1|'sech(asech(z))':'z' 782*f2a19305Safresh1|'sech(z)':'1 / cosh(z)' 783*f2a19305Safresh1|'sinh(asinh(z))':'z' 784*f2a19305Safresh1|'tanh(atanh(z))':'z' 785*f2a19305Safresh1 786*f2a19305Safresh1{ (0.2,-0.4); [1,0.5]; -1.2; (-1,0.5); 0.5; (1.1, 0) } 787*f2a19305Safresh1 788*f2a19305Safresh1|'acos(cos(z)) ** 2':'z * z' 789*f2a19305Safresh1|'acosh(cosh(z)) ** 2':'z * z' 790*f2a19305Safresh1|'acoth(z)':'acotanh(z)' 791*f2a19305Safresh1|'acoth(z)':'atanh(1 / z)' 792*f2a19305Safresh1|'acsch(z)':'acosech(z)' 793*f2a19305Safresh1|'acsch(z)':'asinh(1 / z)' 794*f2a19305Safresh1|'asech(z)':'acosh(1 / z)' 795*f2a19305Safresh1|'asin(sin(z))':'z' 796*f2a19305Safresh1|'asinh(sinh(z))':'z' 797*f2a19305Safresh1|'atan(tan(z))':'z' 798*f2a19305Safresh1|'atanh(tanh(z))':'z' 799*f2a19305Safresh1 800*f2a19305Safresh1&log 801*f2a19305Safresh1(-2.0,0):( 0.69314718055995, 3.14159265358979) 802*f2a19305Safresh1(-1.0,0):( 0 , 3.14159265358979) 803*f2a19305Safresh1(-0.5,0):( -0.69314718055995, 3.14159265358979) 804*f2a19305Safresh1( 0.5,0):( -0.69314718055995, 0 ) 805*f2a19305Safresh1( 1.0,0):( 0 , 0 ) 806*f2a19305Safresh1( 2.0,0):( 0.69314718055995, 0 ) 807*f2a19305Safresh1 808*f2a19305Safresh1&log 809*f2a19305Safresh1( 2, 3):( 1.28247467873077, 0.98279372324733) 810*f2a19305Safresh1(-2, 3):( 1.28247467873077, 2.15879893034246) 811*f2a19305Safresh1(-2,-3):( 1.28247467873077, -2.15879893034246) 812*f2a19305Safresh1( 2,-3):( 1.28247467873077, -0.98279372324733) 813*f2a19305Safresh1 814*f2a19305Safresh1&sin 815*f2a19305Safresh1(-2.0,0):( -0.90929742682568, 0 ) 816*f2a19305Safresh1(-1.0,0):( -0.84147098480790, 0 ) 817*f2a19305Safresh1(-0.5,0):( -0.47942553860420, 0 ) 818*f2a19305Safresh1( 0.0,0):( 0 , 0 ) 819*f2a19305Safresh1( 0.5,0):( 0.47942553860420, 0 ) 820*f2a19305Safresh1( 1.0,0):( 0.84147098480790, 0 ) 821*f2a19305Safresh1( 2.0,0):( 0.90929742682568, 0 ) 822*f2a19305Safresh1 823*f2a19305Safresh1&sin 824*f2a19305Safresh1( 2, 3):( 9.15449914691143, -4.16890695996656) 825*f2a19305Safresh1(-2, 3):( -9.15449914691143, -4.16890695996656) 826*f2a19305Safresh1(-2,-3):( -9.15449914691143, 4.16890695996656) 827*f2a19305Safresh1( 2,-3):( 9.15449914691143, 4.16890695996656) 828*f2a19305Safresh1 829*f2a19305Safresh1&cos 830*f2a19305Safresh1(-2.0,0):( -0.41614683654714, 0 ) 831*f2a19305Safresh1(-1.0,0):( 0.54030230586814, 0 ) 832*f2a19305Safresh1(-0.5,0):( 0.87758256189037, 0 ) 833*f2a19305Safresh1( 0.0,0):( 1 , 0 ) 834*f2a19305Safresh1( 0.5,0):( 0.87758256189037, 0 ) 835*f2a19305Safresh1( 1.0,0):( 0.54030230586814, 0 ) 836*f2a19305Safresh1( 2.0,0):( -0.41614683654714, 0 ) 837*f2a19305Safresh1 838*f2a19305Safresh1&cos 839*f2a19305Safresh1( 2, 3):( -4.18962569096881, -9.10922789375534) 840*f2a19305Safresh1(-2, 3):( -4.18962569096881, 9.10922789375534) 841*f2a19305Safresh1(-2,-3):( -4.18962569096881, -9.10922789375534) 842*f2a19305Safresh1( 2,-3):( -4.18962569096881, 9.10922789375534) 843*f2a19305Safresh1 844*f2a19305Safresh1&tan 845*f2a19305Safresh1(-2.0,0):( 2.18503986326152, 0 ) 846*f2a19305Safresh1(-1.0,0):( -1.55740772465490, 0 ) 847*f2a19305Safresh1(-0.5,0):( -0.54630248984379, 0 ) 848*f2a19305Safresh1( 0.0,0):( 0 , 0 ) 849*f2a19305Safresh1( 0.5,0):( 0.54630248984379, 0 ) 850*f2a19305Safresh1( 1.0,0):( 1.55740772465490, 0 ) 851*f2a19305Safresh1( 2.0,0):( -2.18503986326152, 0 ) 852*f2a19305Safresh1 853*f2a19305Safresh1&tan 854*f2a19305Safresh1( 2, 3):( -0.00376402564150, 1.00323862735361) 855*f2a19305Safresh1(-2, 3):( 0.00376402564150, 1.00323862735361) 856*f2a19305Safresh1(-2,-3):( 0.00376402564150, -1.00323862735361) 857*f2a19305Safresh1( 2,-3):( -0.00376402564150, -1.00323862735361) 858*f2a19305Safresh1 859*f2a19305Safresh1&sec 860*f2a19305Safresh1(-2.0,0):( -2.40299796172238, 0 ) 861*f2a19305Safresh1(-1.0,0):( 1.85081571768093, 0 ) 862*f2a19305Safresh1(-0.5,0):( 1.13949392732455, 0 ) 863*f2a19305Safresh1( 0.0,0):( 1 , 0 ) 864*f2a19305Safresh1( 0.5,0):( 1.13949392732455, 0 ) 865*f2a19305Safresh1( 1.0,0):( 1.85081571768093, 0 ) 866*f2a19305Safresh1( 2.0,0):( -2.40299796172238, 0 ) 867*f2a19305Safresh1 868*f2a19305Safresh1&sec 869*f2a19305Safresh1( 2, 3):( -0.04167496441114, 0.09061113719624) 870*f2a19305Safresh1(-2, 3):( -0.04167496441114, -0.09061113719624) 871*f2a19305Safresh1(-2,-3):( -0.04167496441114, 0.09061113719624) 872*f2a19305Safresh1( 2,-3):( -0.04167496441114, -0.09061113719624) 873*f2a19305Safresh1 874*f2a19305Safresh1&csc 875*f2a19305Safresh1(-2.0,0):( -1.09975017029462, 0 ) 876*f2a19305Safresh1(-1.0,0):( -1.18839510577812, 0 ) 877*f2a19305Safresh1(-0.5,0):( -2.08582964293349, 0 ) 878*f2a19305Safresh1( 0.5,0):( 2.08582964293349, 0 ) 879*f2a19305Safresh1( 1.0,0):( 1.18839510577812, 0 ) 880*f2a19305Safresh1( 2.0,0):( 1.09975017029462, 0 ) 881*f2a19305Safresh1 882*f2a19305Safresh1&csc 883*f2a19305Safresh1( 2, 3):( 0.09047320975321, 0.04120098628857) 884*f2a19305Safresh1(-2, 3):( -0.09047320975321, 0.04120098628857) 885*f2a19305Safresh1(-2,-3):( -0.09047320975321, -0.04120098628857) 886*f2a19305Safresh1( 2,-3):( 0.09047320975321, -0.04120098628857) 887*f2a19305Safresh1 888*f2a19305Safresh1&cot 889*f2a19305Safresh1(-2.0,0):( 0.45765755436029, 0 ) 890*f2a19305Safresh1(-1.0,0):( -0.64209261593433, 0 ) 891*f2a19305Safresh1(-0.5,0):( -1.83048772171245, 0 ) 892*f2a19305Safresh1( 0.5,0):( 1.83048772171245, 0 ) 893*f2a19305Safresh1( 1.0,0):( 0.64209261593433, 0 ) 894*f2a19305Safresh1( 2.0,0):( -0.45765755436029, 0 ) 895*f2a19305Safresh1 896*f2a19305Safresh1&cot 897*f2a19305Safresh1( 2, 3):( -0.00373971037634, -0.99675779656936) 898*f2a19305Safresh1(-2, 3):( 0.00373971037634, -0.99675779656936) 899*f2a19305Safresh1(-2,-3):( 0.00373971037634, 0.99675779656936) 900*f2a19305Safresh1( 2,-3):( -0.00373971037634, 0.99675779656936) 901*f2a19305Safresh1 902*f2a19305Safresh1&asin 903*f2a19305Safresh1(-2.0,0):( -1.57079632679490, 1.31695789692482) 904*f2a19305Safresh1(-1.0,0):( -1.57079632679490, 0 ) 905*f2a19305Safresh1(-0.5,0):( -0.52359877559830, 0 ) 906*f2a19305Safresh1( 0.0,0):( 0 , 0 ) 907*f2a19305Safresh1( 0.5,0):( 0.52359877559830, 0 ) 908*f2a19305Safresh1( 1.0,0):( 1.57079632679490, 0 ) 909*f2a19305Safresh1( 2.0,0):( 1.57079632679490, -1.31695789692482) 910*f2a19305Safresh1 911*f2a19305Safresh1&asin 912*f2a19305Safresh1( 2, 3):( 0.57065278432110, 1.98338702991654) 913*f2a19305Safresh1(-2, 3):( -0.57065278432110, 1.98338702991654) 914*f2a19305Safresh1(-2,-3):( -0.57065278432110, -1.98338702991654) 915*f2a19305Safresh1( 2,-3):( 0.57065278432110, -1.98338702991654) 916*f2a19305Safresh1 917*f2a19305Safresh1&acos 918*f2a19305Safresh1(-2.0,0):( 3.14159265358979, -1.31695789692482) 919*f2a19305Safresh1(-1.0,0):( 3.14159265358979, 0 ) 920*f2a19305Safresh1(-0.5,0):( 2.09439510239320, 0 ) 921*f2a19305Safresh1( 0.0,0):( 1.57079632679490, 0 ) 922*f2a19305Safresh1( 0.5,0):( 1.04719755119660, 0 ) 923*f2a19305Safresh1( 1.0,0):( 0 , 0 ) 924*f2a19305Safresh1( 2.0,0):( 0 , 1.31695789692482) 925*f2a19305Safresh1 926*f2a19305Safresh1&acos 927*f2a19305Safresh1( 2, 3):( 1.00014354247380, -1.98338702991654) 928*f2a19305Safresh1(-2, 3):( 2.14144911111600, -1.98338702991654) 929*f2a19305Safresh1(-2,-3):( 2.14144911111600, 1.98338702991654) 930*f2a19305Safresh1( 2,-3):( 1.00014354247380, 1.98338702991654) 931*f2a19305Safresh1 932*f2a19305Safresh1&atan 933*f2a19305Safresh1(-2.0,0):( -1.10714871779409, 0 ) 934*f2a19305Safresh1(-1.0,0):( -0.78539816339745, 0 ) 935*f2a19305Safresh1(-0.5,0):( -0.46364760900081, 0 ) 936*f2a19305Safresh1( 0.0,0):( 0 , 0 ) 937*f2a19305Safresh1( 0.5,0):( 0.46364760900081, 0 ) 938*f2a19305Safresh1( 1.0,0):( 0.78539816339745, 0 ) 939*f2a19305Safresh1( 2.0,0):( 1.10714871779409, 0 ) 940*f2a19305Safresh1 941*f2a19305Safresh1&atan 942*f2a19305Safresh1( 2, 3):( 1.40992104959658, 0.22907268296854) 943*f2a19305Safresh1(-2, 3):( -1.40992104959658, 0.22907268296854) 944*f2a19305Safresh1(-2,-3):( -1.40992104959658, -0.22907268296854) 945*f2a19305Safresh1( 2,-3):( 1.40992104959658, -0.22907268296854) 946*f2a19305Safresh1 947*f2a19305Safresh1&asec 948*f2a19305Safresh1(-2.0,0):( 2.09439510239320, 0 ) 949*f2a19305Safresh1(-1.0,0):( 3.14159265358979, 0 ) 950*f2a19305Safresh1(-0.5,0):( 3.14159265358979, -1.31695789692482) 951*f2a19305Safresh1( 0.5,0):( 0 , 1.31695789692482) 952*f2a19305Safresh1( 1.0,0):( 0 , 0 ) 953*f2a19305Safresh1( 2.0,0):( 1.04719755119660, 0 ) 954*f2a19305Safresh1 955*f2a19305Safresh1&asec 956*f2a19305Safresh1( 2, 3):( 1.42041072246703, 0.23133469857397) 957*f2a19305Safresh1(-2, 3):( 1.72118193112276, 0.23133469857397) 958*f2a19305Safresh1(-2,-3):( 1.72118193112276, -0.23133469857397) 959*f2a19305Safresh1( 2,-3):( 1.42041072246703, -0.23133469857397) 960*f2a19305Safresh1 961*f2a19305Safresh1&acsc 962*f2a19305Safresh1(-2.0,0):( -0.52359877559830, 0 ) 963*f2a19305Safresh1(-1.0,0):( -1.57079632679490, 0 ) 964*f2a19305Safresh1(-0.5,0):( -1.57079632679490, 1.31695789692482) 965*f2a19305Safresh1( 0.5,0):( 1.57079632679490, -1.31695789692482) 966*f2a19305Safresh1( 1.0,0):( 1.57079632679490, 0 ) 967*f2a19305Safresh1( 2.0,0):( 0.52359877559830, 0 ) 968*f2a19305Safresh1 969*f2a19305Safresh1&acsc 970*f2a19305Safresh1( 2, 3):( 0.15038560432786, -0.23133469857397) 971*f2a19305Safresh1(-2, 3):( -0.15038560432786, -0.23133469857397) 972*f2a19305Safresh1(-2,-3):( -0.15038560432786, 0.23133469857397) 973*f2a19305Safresh1( 2,-3):( 0.15038560432786, 0.23133469857397) 974*f2a19305Safresh1 975*f2a19305Safresh1&acot 976*f2a19305Safresh1(-2.0,0):( -0.46364760900081, 0 ) 977*f2a19305Safresh1(-1.0,0):( -0.78539816339745, 0 ) 978*f2a19305Safresh1(-0.5,0):( -1.10714871779409, 0 ) 979*f2a19305Safresh1( 0.5,0):( 1.10714871779409, 0 ) 980*f2a19305Safresh1( 1.0,0):( 0.78539816339745, 0 ) 981*f2a19305Safresh1( 2.0,0):( 0.46364760900081, 0 ) 982*f2a19305Safresh1 983*f2a19305Safresh1&acot 984*f2a19305Safresh1( 2, 3):( 0.16087527719832, -0.22907268296854) 985*f2a19305Safresh1(-2, 3):( -0.16087527719832, -0.22907268296854) 986*f2a19305Safresh1(-2,-3):( -0.16087527719832, 0.22907268296854) 987*f2a19305Safresh1( 2,-3):( 0.16087527719832, 0.22907268296854) 988*f2a19305Safresh1 989*f2a19305Safresh1&sinh 990*f2a19305Safresh1(-2.0,0):( -3.62686040784702, 0 ) 991*f2a19305Safresh1(-1.0,0):( -1.17520119364380, 0 ) 992*f2a19305Safresh1(-0.5,0):( -0.52109530549375, 0 ) 993*f2a19305Safresh1( 0.0,0):( 0 , 0 ) 994*f2a19305Safresh1( 0.5,0):( 0.52109530549375, 0 ) 995*f2a19305Safresh1( 1.0,0):( 1.17520119364380, 0 ) 996*f2a19305Safresh1( 2.0,0):( 3.62686040784702, 0 ) 997*f2a19305Safresh1 998*f2a19305Safresh1&sinh 999*f2a19305Safresh1( 2, 3):( -3.59056458998578, 0.53092108624852) 1000*f2a19305Safresh1(-2, 3):( 3.59056458998578, 0.53092108624852) 1001*f2a19305Safresh1(-2,-3):( 3.59056458998578, -0.53092108624852) 1002*f2a19305Safresh1( 2,-3):( -3.59056458998578, -0.53092108624852) 1003*f2a19305Safresh1 1004*f2a19305Safresh1&cosh 1005*f2a19305Safresh1(-2.0,0):( 3.76219569108363, 0 ) 1006*f2a19305Safresh1(-1.0,0):( 1.54308063481524, 0 ) 1007*f2a19305Safresh1(-0.5,0):( 1.12762596520638, 0 ) 1008*f2a19305Safresh1( 0.0,0):( 1 , 0 ) 1009*f2a19305Safresh1( 0.5,0):( 1.12762596520638, 0 ) 1010*f2a19305Safresh1( 1.0,0):( 1.54308063481524, 0 ) 1011*f2a19305Safresh1( 2.0,0):( 3.76219569108363, 0 ) 1012*f2a19305Safresh1 1013*f2a19305Safresh1&cosh 1014*f2a19305Safresh1( 2, 3):( -3.72454550491532, 0.51182256998738) 1015*f2a19305Safresh1(-2, 3):( -3.72454550491532, -0.51182256998738) 1016*f2a19305Safresh1(-2,-3):( -3.72454550491532, 0.51182256998738) 1017*f2a19305Safresh1( 2,-3):( -3.72454550491532, -0.51182256998738) 1018*f2a19305Safresh1 1019*f2a19305Safresh1&tanh 1020*f2a19305Safresh1(-2.0,0):( -0.96402758007582, 0 ) 1021*f2a19305Safresh1(-1.0,0):( -0.76159415595576, 0 ) 1022*f2a19305Safresh1(-0.5,0):( -0.46211715726001, 0 ) 1023*f2a19305Safresh1( 0.0,0):( 0 , 0 ) 1024*f2a19305Safresh1( 0.5,0):( 0.46211715726001, 0 ) 1025*f2a19305Safresh1( 1.0,0):( 0.76159415595576, 0 ) 1026*f2a19305Safresh1( 2.0,0):( 0.96402758007582, 0 ) 1027*f2a19305Safresh1 1028*f2a19305Safresh1&tanh 1029*f2a19305Safresh1( 2, 3):( 0.96538587902213, -0.00988437503832) 1030*f2a19305Safresh1(-2, 3):( -0.96538587902213, -0.00988437503832) 1031*f2a19305Safresh1(-2,-3):( -0.96538587902213, 0.00988437503832) 1032*f2a19305Safresh1( 2,-3):( 0.96538587902213, 0.00988437503832) 1033*f2a19305Safresh1 1034*f2a19305Safresh1&sech 1035*f2a19305Safresh1(-2.0,0):( 0.26580222883408, 0 ) 1036*f2a19305Safresh1(-1.0,0):( 0.64805427366389, 0 ) 1037*f2a19305Safresh1(-0.5,0):( 0.88681888397007, 0 ) 1038*f2a19305Safresh1( 0.0,0):( 1 , 0 ) 1039*f2a19305Safresh1( 0.5,0):( 0.88681888397007, 0 ) 1040*f2a19305Safresh1( 1.0,0):( 0.64805427366389, 0 ) 1041*f2a19305Safresh1( 2.0,0):( 0.26580222883408, 0 ) 1042*f2a19305Safresh1 1043*f2a19305Safresh1&sech 1044*f2a19305Safresh1( 2, 3):( -0.26351297515839, -0.03621163655877) 1045*f2a19305Safresh1(-2, 3):( -0.26351297515839, 0.03621163655877) 1046*f2a19305Safresh1(-2,-3):( -0.26351297515839, -0.03621163655877) 1047*f2a19305Safresh1( 2,-3):( -0.26351297515839, 0.03621163655877) 1048*f2a19305Safresh1 1049*f2a19305Safresh1&csch 1050*f2a19305Safresh1(-2.0,0):( -0.27572056477178, 0 ) 1051*f2a19305Safresh1(-1.0,0):( -0.85091812823932, 0 ) 1052*f2a19305Safresh1(-0.5,0):( -1.91903475133494, 0 ) 1053*f2a19305Safresh1( 0.5,0):( 1.91903475133494, 0 ) 1054*f2a19305Safresh1( 1.0,0):( 0.85091812823932, 0 ) 1055*f2a19305Safresh1( 2.0,0):( 0.27572056477178, 0 ) 1056*f2a19305Safresh1 1057*f2a19305Safresh1&csch 1058*f2a19305Safresh1( 2, 3):( -0.27254866146294, -0.04030057885689) 1059*f2a19305Safresh1(-2, 3):( 0.27254866146294, -0.04030057885689) 1060*f2a19305Safresh1(-2,-3):( 0.27254866146294, 0.04030057885689) 1061*f2a19305Safresh1( 2,-3):( -0.27254866146294, 0.04030057885689) 1062*f2a19305Safresh1 1063*f2a19305Safresh1&coth 1064*f2a19305Safresh1(-2.0,0):( -1.03731472072755, 0 ) 1065*f2a19305Safresh1(-1.0,0):( -1.31303528549933, 0 ) 1066*f2a19305Safresh1(-0.5,0):( -2.16395341373865, 0 ) 1067*f2a19305Safresh1( 0.5,0):( 2.16395341373865, 0 ) 1068*f2a19305Safresh1( 1.0,0):( 1.31303528549933, 0 ) 1069*f2a19305Safresh1( 2.0,0):( 1.03731472072755, 0 ) 1070*f2a19305Safresh1 1071*f2a19305Safresh1&coth 1072*f2a19305Safresh1( 2, 3):( 1.03574663776500, 0.01060478347034) 1073*f2a19305Safresh1(-2, 3):( -1.03574663776500, 0.01060478347034) 1074*f2a19305Safresh1(-2,-3):( -1.03574663776500, -0.01060478347034) 1075*f2a19305Safresh1( 2,-3):( 1.03574663776500, -0.01060478347034) 1076*f2a19305Safresh1 1077*f2a19305Safresh1&asinh 1078*f2a19305Safresh1(-2.0,0):( -1.44363547517881, 0 ) 1079*f2a19305Safresh1(-1.0,0):( -0.88137358701954, 0 ) 1080*f2a19305Safresh1(-0.5,0):( -0.48121182505960, 0 ) 1081*f2a19305Safresh1( 0.0,0):( 0 , 0 ) 1082*f2a19305Safresh1( 0.5,0):( 0.48121182505960, 0 ) 1083*f2a19305Safresh1( 1.0,0):( 0.88137358701954, 0 ) 1084*f2a19305Safresh1( 2.0,0):( 1.44363547517881, 0 ) 1085*f2a19305Safresh1 1086*f2a19305Safresh1&asinh 1087*f2a19305Safresh1( 2, 3):( 1.96863792579310, 0.96465850440760) 1088*f2a19305Safresh1(-2, 3):( -1.96863792579310, 0.96465850440761) 1089*f2a19305Safresh1(-2,-3):( -1.96863792579310, -0.96465850440761) 1090*f2a19305Safresh1( 2,-3):( 1.96863792579310, -0.96465850440760) 1091*f2a19305Safresh1 1092*f2a19305Safresh1&acosh 1093*f2a19305Safresh1(-2.0,0):( 1.31695789692482, 3.14159265358979) 1094*f2a19305Safresh1(-1.0,0):( 0, 3.14159265358979) 1095*f2a19305Safresh1(-0.5,0):( 0, 2.09439510239320) 1096*f2a19305Safresh1( 0.0,0):( 0, 1.57079632679490) 1097*f2a19305Safresh1( 0.5,0):( 0, 1.04719755119660) 1098*f2a19305Safresh1( 1.0,0):( 0 , 0 ) 1099*f2a19305Safresh1( 2.0,0):( 1.31695789692482, 0 ) 1100*f2a19305Safresh1 1101*f2a19305Safresh1&acosh 1102*f2a19305Safresh1( 2, 3):( 1.98338702991654, 1.00014354247380) 1103*f2a19305Safresh1(-2, 3):( 1.98338702991653, 2.14144911111600) 1104*f2a19305Safresh1(-2,-3):( 1.98338702991653, -2.14144911111600) 1105*f2a19305Safresh1( 2,-3):( 1.98338702991654, -1.00014354247380) 1106*f2a19305Safresh1 1107*f2a19305Safresh1&atanh 1108*f2a19305Safresh1(-2.0,0):( -0.54930614433405, 1.57079632679490) 1109*f2a19305Safresh1(-0.5,0):( -0.54930614433405, 0 ) 1110*f2a19305Safresh1( 0.0,0):( 0 , 0 ) 1111*f2a19305Safresh1( 0.5,0):( 0.54930614433405, 0 ) 1112*f2a19305Safresh1( 2.0,0):( 0.54930614433405, 1.57079632679490) 1113*f2a19305Safresh1 1114*f2a19305Safresh1&atanh 1115*f2a19305Safresh1( 2, 3):( 0.14694666622553, 1.33897252229449) 1116*f2a19305Safresh1(-2, 3):( -0.14694666622553, 1.33897252229449) 1117*f2a19305Safresh1(-2,-3):( -0.14694666622553, -1.33897252229449) 1118*f2a19305Safresh1( 2,-3):( 0.14694666622553, -1.33897252229449) 1119*f2a19305Safresh1 1120*f2a19305Safresh1&asech 1121*f2a19305Safresh1(-2.0,0):( 0 , 2.09439510239320) 1122*f2a19305Safresh1(-1.0,0):( 0 , 3.14159265358979) 1123*f2a19305Safresh1(-0.5,0):( 1.31695789692482, 3.14159265358979) 1124*f2a19305Safresh1( 0.5,0):( 1.31695789692482, 0 ) 1125*f2a19305Safresh1( 1.0,0):( 0 , 0 ) 1126*f2a19305Safresh1( 2.0,0):( 0 , 1.04719755119660) 1127*f2a19305Safresh1 1128*f2a19305Safresh1&asech 1129*f2a19305Safresh1( 2, 3):( 0.23133469857397, -1.42041072246703) 1130*f2a19305Safresh1(-2, 3):( 0.23133469857397, -1.72118193112276) 1131*f2a19305Safresh1(-2,-3):( 0.23133469857397, 1.72118193112276) 1132*f2a19305Safresh1( 2,-3):( 0.23133469857397, 1.42041072246703) 1133*f2a19305Safresh1 1134*f2a19305Safresh1&acsch 1135*f2a19305Safresh1(-2.0,0):( -0.48121182505960, 0 ) 1136*f2a19305Safresh1(-1.0,0):( -0.88137358701954, 0 ) 1137*f2a19305Safresh1(-0.5,0):( -1.44363547517881, 0 ) 1138*f2a19305Safresh1( 0.5,0):( 1.44363547517881, 0 ) 1139*f2a19305Safresh1( 1.0,0):( 0.88137358701954, 0 ) 1140*f2a19305Safresh1( 2.0,0):( 0.48121182505960, 0 ) 1141*f2a19305Safresh1 1142*f2a19305Safresh1&acsch 1143*f2a19305Safresh1( 2, 3):( 0.15735549884499, -0.22996290237721) 1144*f2a19305Safresh1(-2, 3):( -0.15735549884499, -0.22996290237721) 1145*f2a19305Safresh1(-2,-3):( -0.15735549884499, 0.22996290237721) 1146*f2a19305Safresh1( 2,-3):( 0.15735549884499, 0.22996290237721) 1147*f2a19305Safresh1 1148*f2a19305Safresh1&acoth 1149*f2a19305Safresh1(-2.0,0):( -0.54930614433405, 0 ) 1150*f2a19305Safresh1(-0.5,0):( -0.54930614433405, 1.57079632679490) 1151*f2a19305Safresh1( 0.5,0):( 0.54930614433405, 1.57079632679490) 1152*f2a19305Safresh1( 2.0,0):( 0.54930614433405, 0 ) 1153*f2a19305Safresh1 1154*f2a19305Safresh1&acoth 1155*f2a19305Safresh1( 2, 3):( 0.14694666622553, -0.23182380450040) 1156*f2a19305Safresh1(-2, 3):( -0.14694666622553, -0.23182380450040) 1157*f2a19305Safresh1(-2,-3):( -0.14694666622553, 0.23182380450040) 1158*f2a19305Safresh1( 2,-3):( 0.14694666622553, 0.23182380450040) 1159*f2a19305Safresh1 1160*f2a19305Safresh1# eof 1161