use warnings; use strict; use Math::Complex_C qw(:all); my $op = new Math::Complex_C(5, 4.5); my $pow = Math::Complex_C->new(2, 2.5); my $rop = Math::Complex_C::new(); print "1..20\n"; my $eps = 1e-12; pow_c($rop, $op, $pow); if(approx(real_c($rop), 7.23403197989648, $eps)) {print "ok 1\n"} else { warn "1: \$rop: $rop\n"; print "not ok 1\n"; } if(approx(imag_c($rop), -0.37869801657204, $eps)) {print "ok 2\n"} else { warn "2: \$rop: $rop\n"; print "not ok 2\n"; } sqrt_c($rop, $op); if(approx(real_c($rop), 2.4214470904334102, $eps)) {print "ok 3\n"} else { warn "3: \$rop: $rop\n"; print "not ok 3\n"; } if(approx(imag_c($rop), 0.929196433359722, $eps)) {print "ok 4\n"} else { warn "4: \$rop: $rop\n"; print "not ok 4\n"; } ############################## ############################## $rop = $op ** $pow; if(approx(real_c($rop), 7.2340319798964812, 0.00000000001)) {print "ok 5\n"} else { warn "5: \$rop: $rop\n"; print "not ok 5\n"; } if(approx(imag_c($rop), -0.37869801657204, 0.00000000001)) {print "ok 6\n"} else { warn "6: \$rop: $rop\n"; print "not ok 6\n"; } $rop = sqrt($op); if(approx(real_c($rop), 2.4214470904334102, $eps)) {print "ok 7\n"} else { warn "7: \$rop: $rop\n"; print "not ok 7\n"; } if(approx(imag_c($rop), 0.929196433359722, $eps)) {print "ok 8\n"} else { warn "8: \$rop: $rop\n"; print "not ok 8\n"; } ############################## ############################## $rop = $op ** 3; if(approx(real_c($rop), -178.75, $eps)) {print "ok 9\n"} else { warn "9: \$rop: $rop\n"; print "not ok 9\n"; } if(approx(imag_c($rop), 246.375, $eps)) {print "ok 10\n"} else { warn "10: \$rop: $rop\n"; print "not ok 10\n"; } ############################## ############################## $rop = $op ** -3; if(approx(real_c($rop), -0.00192925795578593, $eps)) {print "ok 11\n"} else { warn "11: \$rop: $rop\n"; print "not ok 11\n"; } if(approx(imag_c($rop), -0.00265913806353431, $eps)) {print "ok 12\n"} else { warn "12: \$rop: $rop\n"; print "not ok 12\n"; } ############################## ############################## $rop = $op ** -2.75; if(approx(real_c($rop), -0.00227483300435652, $eps)) {print "ok 13\n"} else { warn "13: \$rop: $rop\n"; print "not ok 13\n"; } if(approx(imag_c($rop), -0.00477682943207756, $eps)) {print "ok 14\n"} else { warn "14: \$rop: $rop\n"; print "not ok 14\n"; } ############################## ############################## my $op1 = $op; my $op2 = $op; my $op3 = $op; ############################## ############################## $op1 **= 3; if(approx(real_c($op1), -178.75, $eps)) {print "ok 15\n"} else { warn "15: \$op1: $op1\n"; print "not ok 15\n"; } if(approx(imag_c($op1), 246.375, $eps)) {print "ok 16\n"} else { warn "16: \$op1: $op1\n"; print "not ok 16\n"; } ############################## ############################## $op2 **= -3; if(approx(real_c($op2), -0.00192925795578593, $eps)) {print "ok 17\n"} else { warn "17: \$op2: $op2\n"; print "not ok 17\n"; } if(approx(imag_c($op2), -0.00265913806353431, $eps)) {print "ok 18\n"} else { warn "18: \$op2: $op2\n"; print "not ok 18\n"; } ############################## ############################## $op3 **= -2.75; if(approx(real_c($op3), -0.00227483300435652, $eps)) {print "ok 19\n"} else { warn "19: \$op3: $op3\n"; print "not ok 19\n"; } if(approx(imag_c($op3), -0.00477682943207756, $eps)) {print "ok 20\n"} else { warn "20: \$op3: $op3\n"; print "not ok 20\n"; } ############################## ############################## sub approx { if(($_[0] > ($_[1] - $_[2])) && ($_[0] < ($_[1] + $_[2]))) {return 1} return 0; }