⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bigrat.pm

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 PM
📖 第 1 页 / 共 4 页
字号:
  {  my $self = shift;  my $l = scalar @_;  my $lib = ''; my @a;  my $try = 'try';  for ( my $i = 0; $i < $l ; $i++)    {    if ( $_[$i] eq ':constant' )      {      # this rest causes overlord er load to step in      overload::constant float => sub { $self->new(shift); };      }#    elsif ($_[$i] eq 'upgrade')#      {#     # this causes upgrading#      $upgrade = $_[$i+1];		# or undef to disable#      $i++;#      }    elsif ($_[$i] eq 'downgrade')      {      # this causes downgrading      $downgrade = $_[$i+1];		# or undef to disable      $i++;      }    elsif ($_[$i] =~ /^(lib|try|only)\z/)      {      $lib = $_[$i+1] || '';		# default Calc      $try = $1;			# lib, try or only      $i++;      }    elsif ($_[$i] eq 'with')      {      # this argument is no longer used      #$MBI = $_[$i+1] || 'Math::BigInt::Calc';	# default Math::BigInt::Calc      $i++;      }    else      {      push @a, $_[$i];      }    }  require Math::BigInt;  # let use Math::BigInt lib => 'GMP'; use Math::BigRat; still have GMP  if ($lib ne '')    {    my @c = split /\s*,\s*/, $lib;    foreach (@c)      {      $_ =~ tr/a-zA-Z0-9://cd;                    # limit to sane characters      }    $lib = join(",", @c);    }  my @import = ('objectify');  push @import, $try => $lib if $lib ne '';  # MBI already loaded, so feed it our lib arguments  Math::BigInt->import( @import );  $MBI = Math::BigFloat->config()->{lib};  # register us with MBI to get notified of future lib changes  Math::BigInt::_register_callback( $self, sub { $MBI = $_[0]; } );    # any non :constant stuff is handled by our parent, Exporter (loaded  # by Math::BigFloat, even if @_ is empty, to give it a chance  $self->SUPER::import(@a);             # for subclasses  $self->export_to_level(1,$self,@a);   # need this, too  }1;__END__=head1 NAMEMath::BigRat - Arbitrary big rational numbers=head1 SYNOPSIS	use Math::BigRat;	my $x = Math::BigRat->new('3/7'); $x += '5/9';	print $x->bstr(),"\n";  	print $x ** 2,"\n";	my $y = Math::BigRat->new('inf');	print "$y ", ($y->is_inf ? 'is' : 'is not') , " infinity\n";	my $z = Math::BigRat->new(144); $z->bsqrt();=head1 DESCRIPTIONMath::BigRat complements Math::BigInt and Math::BigFloat by providing supportfor arbitrary big rational numbers.=head2 MATH LIBRARYYou can change the underlying module that does the low-levelmath operations by using:	use Math::BigRat try => 'GMP';Note: This needs Math::BigInt::GMP installed.The following would first try to find Math::BigInt::Foo, thenMath::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc:	use Math::BigRat try => 'Foo,Math::BigInt::Bar';If you want to get warned when the fallback occurs, replace "try" with"lib":	use Math::BigRat lib => 'Foo,Math::BigInt::Bar';If you want the code to die instead, replace "try" with"only":	use Math::BigRat only => 'Foo,Math::BigInt::Bar';=head1 METHODSAny methods not listed here are derived from Math::BigFloat (orMath::BigInt), so make sure you check these two modules for furtherinformation.=head2 new()	$x = Math::BigRat->new('1/3');Create a new Math::BigRat object. Input can come in various forms:	$x = Math::BigRat->new(123);				# scalars	$x = Math::BigRat->new('inf');				# infinity	$x = Math::BigRat->new('123.3');			# float	$x = Math::BigRat->new('1/3');				# simple string	$x = Math::BigRat->new('1 / 3');			# spaced	$x = Math::BigRat->new('1 / 0.1');			# w/ floats	$x = Math::BigRat->new(Math::BigInt->new(3));		# BigInt	$x = Math::BigRat->new(Math::BigFloat->new('3.1'));	# BigFloat	$x = Math::BigRat->new(Math::BigInt::Lite->new('2'));	# BigLite	# You can also give D and N as different objects:	$x = Math::BigRat->new(		Math::BigInt->new(-123),		Math::BigInt->new(7),		);			# => -123/7=head2 numerator()	$n = $x->numerator();Returns a copy of the numerator (the part above the line) as signed BigInt.=head2 denominator()		$d = $x->denominator();Returns a copy of the denominator (the part under the line) as positive BigInt.=head2 parts()	($n,$d) = $x->parts();Return a list consisting of (signed) numerator and (unsigned) denominator asBigInts.=head2 numify()	my $y = $x->numify();Returns the object as a scalar. This will lose some data if the objectcannot be represented by a normal Perl scalar (integer or float), souse as_int() instead.This routine is automatically used whenever a scalar is required:	my $x = Math::BigRat->new('3/1');	@array = (1,2,3);	$y = $array[$x];		# set $y to 3=head2 as_int()/as_number()	$x = Math::BigRat->new('13/7');	print $x->as_int(),"\n";		# '1'Returns a copy of the object as BigInt, truncated to an integer.C<as_number()> is an alias for C<as_int()>.=head2 as_hex()	$x = Math::BigRat->new('13');	print $x->as_hex(),"\n";		# '0xd'Returns the BigRat as hexadecimal string. Works only for integers. =head2 as_bin()	$x = Math::BigRat->new('13');	print $x->as_bin(),"\n";		# '0x1101'Returns the BigRat as binary string. Works only for integers. =head2 as_oct()	$x = Math::BigRat->new('13');	print $x->as_oct(),"\n";		# '015'Returns the BigRat as octal string. Works only for integers. =head2 from_hex()/from_bin()/from_oct()	my $h = Math::BigRat->from_hex('0x10');	my $b = Math::BigRat->from_bin('0b10000000');	my $o = Math::BigRat->from_oct('020');Create a BigRat from an hexadecimal, binary or octal numberin string form.=head2 length()	$len = $x->length();Return the length of $x in digitis for integer values.=head2 digit()	print Math::BigRat->new('123/1')->digit(1);	# 1	print Math::BigRat->new('123/1')->digit(-1);	# 3Return the N'ths digit from X when X is an integer value.=head2 bnorm()	$x->bnorm();Reduce the number to the shortest form. This routine is calledautomatically whenever it is needed.=head2 bfac()	$x->bfac();Calculates the factorial of $x. For instance:	print Math::BigRat->new('3/1')->bfac(),"\n";	# 1*2*3	print Math::BigRat->new('5/1')->bfac(),"\n";	# 1*2*3*4*5Works currently only for integers.=head2 bround()/round()/bfround()Are not yet implemented.=head2 bmod()	use Math::BigRat;	my $x = Math::BigRat->new('7/4');	my $y = Math::BigRat->new('4/3');	print $x->bmod($y);Set $x to the remainder of the division of $x by $y.=head2 bneg()	$x->bneg();Used to negate the object in-place.=head2 is_one()	print "$x is 1\n" if $x->is_one();Return true if $x is exactly one, otherwise false.=head2 is_zero()	print "$x is 0\n" if $x->is_zero();Return true if $x is exactly zero, otherwise false.=head2 is_pos()/is_positive()	print "$x is >= 0\n" if $x->is_positive();Return true if $x is positive (greater than or equal to zero), otherwisefalse. Please note that '+inf' is also positive, while 'NaN' and '-inf' aren't.C<is_positive()> is an alias for C<is_pos()>.=head2 is_neg()/is_negative()	print "$x is < 0\n" if $x->is_negative();Return true if $x is negative (smaller than zero), otherwise false. Pleasenote that '-inf' is also negative, while 'NaN' and '+inf' aren't.C<is_negative()> is an alias for C<is_neg()>.=head2 is_int()	print "$x is an integer\n" if $x->is_int();Return true if $x has a denominator of 1 (e.g. no fraction parts), otherwisefalse. Please note that '-inf', 'inf' and 'NaN' aren't integer.=head2 is_odd()	print "$x is odd\n" if $x->is_odd();Return true if $x is odd, otherwise false.=head2 is_even()	print "$x is even\n" if $x->is_even();Return true if $x is even, otherwise false.=head2 bceil()	$x->bceil();Set $x to the next bigger integer value (e.g. truncate the number to integerand then increment it by one).=head2 bfloor()		$x->bfloor();Truncate $x to an integer value.=head2 bsqrt()		$x->bsqrt();Calculate the square root of $x.=head2 broot()		$x->broot($n);Calculate the N'th root of $x.=head2 badd()/bmul()/bsub()/bdiv()/bdec()/binc()Please see the documentation in L<Math::BigInt>.=head2 copy()	my $z = $x->copy();Makes a deep copy of the object.Please see the documentation in L<Math::BigInt> for further details.=head2 bstr()/bsstr()	my $x = Math::BigInt->new('8/4');	print $x->bstr(),"\n";			# prints 1/2	print $x->bsstr(),"\n";			# prints 1/2Return a string representating this object.=head2 bacmp()/bcmp()Used to compare numbers.Please see the documentation in L<Math::BigInt> for further details.=head2 blsft()/brsft()Used to shift numbers left/right.Please see the documentation in L<Math::BigInt> for further details.=head2 bpow()	$x->bpow($y);Compute $x ** $y.Please see the documentation in L<Math::BigInt> for further details.=head2 bexp()	$x->bexp($accuracy);		# calculate e ** XCalculates two integers A and B so that A/B is equal to C<e ** $x>, where C<e> isEuler's number.This method was added in v0.20 of Math::BigRat (May 2007).See also L<blog()>.=head2 bnok()	$x->bnok($y);		   # x over y (binomial coefficient n over k)Calculates the binomial coefficient n over k, also called the "choose"function. The result is equivalent to:	( n )      n!	| - |  = -------	( k )    k!(n-k)!This method was added in v0.20 of Math::BigRat (May 2007).=head2 config()        use Data::Dumper;        print Dumper ( Math::BigRat->config() );        print Math::BigRat->config()->{lib},"\n";Returns a hash containing the configuration, e.g. the version number, libloaded etc. The following hash keys are currently filled in with theappropriate information.        key             RO/RW   Description                                Example        ============================================================        lib             RO      Name of the Math library                                Math::BigInt::Calc        lib_version     RO      Version of 'lib'                                0.30        class           RO      The class of config you just called                                Math::BigRat        version         RO      version number of the class you used                                0.10        upgrade         RW      To which class numbers are upgraded                                undef        downgrade       RW      To which class numbers are downgraded                                undef        precision       RW      Global precision                                undef        accuracy        RW      Global accuracy                                undef        round_mode      RW      Global round mode                                even        div_scale       RW      Fallback accuracy for div                                40        trap_nan        RW      Trap creation of NaN (undef = no)                                undef        trap_inf        RW      Trap creation of +inf/-inf (undef = no)                                undefBy passing a reference to a hash you may set the configuration values. Thisworks only for values that a marked with a C<RW> above, anything else isread-only.=head1 BUGSSome things are not yet implemented, or only implemented half-way:=over 2=item inf handling (partial)=item NaN handling (partial)=item rounding (not implemented except for bceil/bfloor)=item $x ** $y where $y is not an integer=item bmod(), blog(), bmodinv() and bmodpow() (partial)=back=head1 LICENSEThis program is free software; you may redistribute it and/or modify it underthe same terms as Perl itself.=head1 SEE ALSOL<Math::BigFloat> and L<Math::Big> as well as L<Math::BigInt::BitVect>,L<Math::BigInt::Pari> and  L<Math::BigInt::GMP>.See L<http://search.cpan.org/search?dist=bignum> for a way to useMath::BigRat.The package at L<http://search.cpan.org/search?dist=Math%3A%3ABigRat>may contain more documentation and examples as well as testcases.=head1 AUTHORS(C) by Tels L<http://bloodgate.com/> 2001 - 2007.=cut

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -