github.com/aergoio/aergo@v1.3.1/libtool/src/gmp-6.1.2/demos/perl/GMP.pm (about) 1 # GMP perl module 2 3 # Copyright 2001-2004 Free Software Foundation, Inc. 4 # 5 # This file is part of the GNU MP Library. 6 # 7 # The GNU MP Library is free software; you can redistribute it and/or modify 8 # it under the terms of either: 9 # 10 # * the GNU Lesser General Public License as published by the Free 11 # Software Foundation; either version 3 of the License, or (at your 12 # option) any later version. 13 # 14 # or 15 # 16 # * the GNU General Public License as published by the Free Software 17 # Foundation; either version 2 of the License, or (at your option) any 18 # later version. 19 # 20 # or both in parallel, as here. 21 # 22 # The GNU MP Library is distributed in the hope that it will be useful, but 23 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 24 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 25 # for more details. 26 # 27 # You should have received copies of the GNU General Public License and the 28 # GNU Lesser General Public License along with the GNU MP Library. If not, 29 # see https://www.gnu.org/licenses/. 30 31 # [Note: The above copyright notice is repeated in the documentation section 32 # below, in order to get it into man pages etc generated by the various pod 33 # conversions. When changing, be sure to update below too.] 34 35 36 # This code is designed to work with perl 5.005, so it and the sub-packages 37 # aren't as modern as they could be. 38 39 package GMP; 40 41 require Symbol; 42 require Exporter; 43 require DynaLoader; 44 @ISA = qw(Exporter DynaLoader); 45 46 @EXPORT = qw(); 47 @EXPORT_OK = qw(version); 48 %EXPORT_TAGS = ('all' => [qw( 49 get_d get_d_2exp get_si get_str integer_p 50 printf sgn sprintf)], 51 'constants' => [()]); 52 Exporter::export_ok_tags('all'); 53 54 $VERSION = '2.00'; 55 bootstrap GMP $VERSION; 56 57 58 # The format string is cut up into "%" specifiers so GMP types can be 59 # passed to GMP::sprintf_internal. Any "*"s are interpolated before 60 # calling sprintf_internal, which saves worrying about variable 61 # argument lists there. 62 # 63 # Because sprintf_internal is only called after the conversion and 64 # operand have been checked there won't be any crashes from a bad 65 # format string. 66 # 67 sub sprintf { 68 my $fmt = shift; 69 my $out = ''; 70 my ($pre, $dummy, $pat, $rest); 71 72 while (($pre, $dummy, $pat, $rest) = ($fmt =~ /^((%%|[^%])*)(%[- +#.*hlLqv\d]*[bcdfeEgGinopsuxX])(.*)$/s)) { 73 74 $out .= $pre; 75 76 my $pat2 = $pat; # $pat with "*"s expanded 77 my @params = (); # arguments per "*"s 78 while ($pat2 =~ /[*]/) { 79 my $arg = shift; 80 $pat2 =~ s/[*]/$arg/; 81 push @params, $arg; 82 } 83 84 if (UNIVERSAL::isa($_[0],"GMP::Mpz")) { 85 if ($pat2 !~ /[dioxX]$/) { 86 die "GMP::sprintf: unsupported output format for mpz: $pat2\n"; 87 } 88 $pat2 =~ s/(.)$/Z$1/; 89 $out .= sprintf_internal ($pat2, shift); 90 91 } elsif (UNIVERSAL::isa($_[0],"GMP::Mpq")) { 92 if ($pat2 !~ /[dioxX]$/) { 93 die "GMP::sprintf: unsupported output format for mpq: $pat2\n"; 94 } 95 $pat2 =~ s/(.)$/Q$1/; 96 $out .= sprintf_internal ($pat2, shift); 97 98 } elsif (UNIVERSAL::isa($_[0],"GMP::Mpf")) { 99 if ($pat2 !~ /[eEfgG]$/) { 100 die "GMP::sprintf: unsupported output format for mpf: $pat2\n"; 101 } 102 $pat2 =~ s/(.)$/F$1/; 103 $out .= sprintf_internal ($pat2, shift); 104 105 } elsif ($pat =~ /n$/) { 106 # do it this way so h, l or V type modifiers are respected, and use a 107 # dummy variable to avoid a warning about discarding the value 108 my $dummy = sprintf "%s$pat", $out, $_[0]; 109 shift; 110 111 } else { 112 $out .= sprintf $pat, @params, shift; 113 } 114 115 $fmt = $rest; 116 } 117 $out .= $fmt; 118 return $out; 119 } 120 121 sub printf { 122 if (ref($_[0]) eq 'GLOB') { 123 my $h = Symbol::qualify_to_ref(shift, caller); 124 print $h GMP::sprintf(@_); 125 } else { 126 print STDOUT GMP::sprintf(@_); 127 } 128 } 129 130 1; 131 __END__ 132 133 134 135 =head1 NAME 136 137 GMP - Perl interface to the GNU Multiple Precision Arithmetic Library 138 139 =head1 SYNOPSIS 140 141 use GMP; 142 use GMP::Mpz; 143 use GMP::Mpq; 144 use GMP::Mpf; 145 use GMP::Rand; 146 147 =head1 DESCRIPTION 148 149 This module provides access to GNU MP arbitrary precision integers, 150 rationals and floating point. 151 152 No functions are exported from these packages by default, but can be 153 selected in the usual way, or the tag :all for everything. 154 155 use GMP::Mpz qw(gcd, lcm); # just these functions 156 use GMP::Mpq qw(:all); # everything in mpq 157 158 =head2 GMP::Mpz 159 160 This class provides arbitrary precision integers. A new mpz can be 161 constructed with C<mpz>. The initial value can be an integer, float, 162 string, mpz, mpq or mpf. Floats, mpq and mpf will be automatically 163 truncated to an integer. 164 165 use GMP::Mpz qw(:all); 166 my $a = mpz(123); 167 my $b = mpz("0xFFFF"); 168 my $c = mpz(1.5); # truncated 169 170 The following overloaded operators are available, and corresponding 171 assignment forms like C<+=>, 172 173 =over 4 174 175 =item 176 177 + - * / % E<lt>E<lt> E<gt>E<gt> ** & | ^ ! E<lt> E<lt>= == != E<gt> E<gt>= 178 E<lt>=E<gt> abs not sqrt 179 180 =back 181 182 C</> and C<%> round towards zero (as per the C<tdiv> functions in GMP). 183 184 The following functions are available, behaving the same as the 185 corresponding GMP mpz functions, 186 187 =over 4 188 189 =item 190 191 bin, cdiv, cdiv_2exp, clrbit, combit, congruent_p, congruent_2exp_p, 192 divexact, divisible_p, divisible_2exp_p, even_p, fac, fdiv, fdiv_2exp, fib, 193 fib2, gcd, gcdext, hamdist, invert, jacobi, kronecker, lcm, lucnum, lucnum2, 194 mod, mpz_export, mpz_import, nextprime, odd_p, perfect_power_p, 195 perfect_square_p, popcount, powm, probab_prime_p, realloc, remove, root, 196 roote, scan0, scan1, setbit, sizeinbase, sqrtrem, tdiv, tdiv_2exp, tstbit 197 198 =back 199 200 C<cdiv>, C<fdiv> and C<tdiv> and their C<2exp> variants return a 201 quotient/remainder pair. C<fib2> returns a pair F[n] and F[n-1], similarly 202 C<lucnum2>. C<gcd> and C<lcm> accept a variable number of arguments (one or 203 more). C<gcdext> returns a triplet of gcd and two cofactors, for example 204 205 use GMP::Mpz qw(:all); 206 $a = 7257; 207 $b = 10701; 208 ($g, $x, $y) = gcdext ($a, $b); 209 print "gcd($a,$b) is $g, and $g == $a*$x + $b*$y\n"; 210 211 C<mpz_import> and C<mpz_export> are so named to avoid the C<import> keyword. 212 Their parameters are as follows, 213 214 $z = mpz_import ($order, $size, $endian, $nails, $string); 215 $string = mpz_export ($order, $size, $endian, $nails, $z); 216 217 The order, size, endian and nails parameters are as per the corresponding C 218 functions. The string input for C<mpz_import> is interpreted as byte data 219 and must be a multiple of $size bytes. C<mpz_export> conversely returns a 220 string of byte data, which will be a multiple of $size bytes. 221 222 C<invert> returns the inverse, or undef if it doesn't exist. C<remove> 223 returns a remainder/multiplicity pair. C<root> returns the nth root, and 224 C<roote> returns a root/bool pair, the bool indicating whether the root is 225 exact. C<sqrtrem> and C<rootrem> return a root/remainder pair. 226 227 C<clrbit>, C<combit> and C<setbit> expect a variable which they can modify, 228 it doesn't make sense to pass a literal constant. Only the given variable 229 is modified, if other variables are referencing the same mpz object then a 230 new copy is made of it. If the variable isn't an mpz it will be coerced to 231 one. For instance, 232 233 use GMP::Mpz qw(setbit); 234 setbit (123, 0); # wrong, don't pass a constant 235 $a = mpz(6); 236 $b = $a; 237 setbit ($a, 0); # $a becomes 7, $b stays at 6 238 239 C<scan0> and C<scan1> return ~0 if no 0 or 1 bit respectively is found. 240 241 =head2 GMP::Mpq 242 243 This class provides rationals with arbitrary precision numerators and 244 denominators. A new mpq can be constructed with C<mpq>. The initial value 245 can be an integer, float, string, mpz, mpq or mpf, or a pair of integers or 246 mpz's. No precision is lost when converting a float or mpf, the exact value 247 is retained. 248 249 use GMP::Mpq qw(:all); 250 $a = mpq(); # zero 251 $b = mpq(0.5); # gives 1/2 252 $b = mpq(14); # integer 14 253 $b = mpq(3,4); # fraction 3/4 254 $b = mpq("7/12"); # fraction 7/12 255 $b = mpq("0xFF/0x100"); # fraction 255/256 256 257 When a fraction is given, it should be in the canonical form specified in 258 the GMP manual, which is denominator positive, no common factors, and zero 259 always represented as 0/1. If not then C<canonicalize> can be called to put 260 it in that form. For example, 261 262 use GMP::Mpq qw(:all); 263 $q = mpq(21,15); # eek! common factor 3 264 canonicalize($q); # get rid of it 265 266 The following overloaded operators are available, and corresponding 267 assignment forms like C<+=>, 268 269 =over 4 270 271 =item 272 273 + - * / E<lt>E<lt> E<gt>E<gt> ** ! E<lt> E<lt>= == != E<gt> E<gt>= 274 E<lt>=E<gt> abs not 275 276 =back 277 278 The following functions are available, 279 280 =over 4 281 282 =item 283 284 den, inv, num 285 286 =back 287 288 C<inv> calculates 1/q, as per the corresponding GMP function. C<num> and 289 C<den> return an mpz copy of the numerator or denominator respectively. In 290 the future C<num> and C<den> might give lvalues so the original mpq can be 291 modified through them, but this is not done currently. 292 293 =head2 GMP::Mpf 294 295 This class provides arbitrary precision floating point numbers. The 296 mantissa is an arbitrary user-selected precision and the exponent is a fixed 297 size (one machine word). 298 299 A new mpf can be constructed with C<mpf>. The initial value can be an 300 integer, float, string, mpz, mpq or mpf. The second argument specifies the 301 desired precision in bits, or if omitted then the default precision is used. 302 303 use GMP::Mpf qw(:all); 304 $a = mpf(); # zero 305 $b = mpf(-7.5); # default precision 306 $c = mpf(1.5, 500); # 500 bits precision 307 $d = mpf("1.0000000000000001"); 308 309 The following overloaded operators are available, with the corresponding 310 assignment forms like C<+=>, 311 312 =over 4 313 314 =item 315 316 + - * / E<lt>E<lt> E<gt>E<gt> ** ! E<lt> E<lt>= == != E<gt> E<gt>= 317 E<lt>=E<gt> abs not sqrt 318 319 =back 320 321 The following functions are available, behaving the same as the 322 corresponding GMP mpf functions, 323 324 =over 4 325 326 =item 327 328 ceil, floor, get_default_prec, get_prec, mpf_eq, set_default_prec, set_prec, 329 trunc 330 331 =back 332 333 C<mpf_eq> is so named to avoid clashing with the perl C<eq> operator. 334 335 C<set_prec> expects a variable which it can modify, it doesn't make sense to 336 pass a literal constant. Only the given variable is modified, if other 337 variables are referencing the same mpf object then a new copy is made of it. 338 If the variable isn't an mpf it will be coerced to one. 339 340 Results are the same precision as inputs, or if two mpf's are given to a 341 binary operator then the precision of the first is used. For example, 342 343 use GMP::Mpf qw(mpf); 344 $a = mpf(2.0, 100); 345 $b = mpf(2.0, 500); 346 $c = $a + $b; # gives 100 bits precision 347 348 Mpf to string conversion via "" or the usual string contexts uses C<$#> the 349 same as normal float to string conversions, or defaults to C<%.g> if C<$#> 350 is not defined. C<%.g> means all significant digits in the selected 351 precision. 352 353 =head2 GMP class 354 355 The following functions are available in the GMP class, 356 357 =over 4 358 359 =item 360 361 fits_slong_p, get_d, get_d_2exp, get_si, get_str, integer_p, printf, sgn, 362 sprintf, version 363 364 =back 365 366 C<get_d_2exp> accepts any integer, string, float, mpz, mpq or mpf operands 367 and returns a float and an integer exponent, 368 369 ($dbl, $exp) = get_d_2exp (mpf ("3.0")); 370 # dbl is 0.75, exp is 2 371 372 C<get_str> takes an optional second argument which is the base, defaulting 373 to decimal. A negative base means upper case, as per the C functions. For 374 integer, integer string, mpz or mpq operands a string is returned. 375 376 use GMP qw(:all); 377 use GMP::Mpq qw(:all); 378 print get_str(mpq(-5,8)),"\n"; # -5/8 379 print get_str(255,16),"\n"; # ff 380 381 For float, float strings or mpf operands, C<get_str> accepts an optional 382 third parameter being how many digits to produce, defaulting to 0 which 383 means all digits. (Only as many digits as can be accurately represented by 384 the float precision are ever produced though.) A string/exponent pair is 385 returned, as per the C mpf_get_str function. For example, 386 387 use GMP qw(:all); 388 use GMP::Mpf qw(:all); 389 ($s, $e) = get_str(111.111111111, 10, 4); 390 printf ".$se$e\n"; # .1111e3 391 ($s, $e) = get_str(1.625, 10); 392 print "0.$s*10^$e\n"; # 0.1625*10^1 393 ($s, $e) = get_str(mpf(2)**20, 16); 394 printf ".%s@%x\n", $s, $e; # .1@14 395 396 C<printf> and C<sprintf> allow formatted output of GMP types. mpz and mpq 397 values can be used with integer conversions (d, o, x, X) and mpf with float 398 conversions (f, e, E, g, G). All the standard perl printf features are 399 available too. For example, 400 401 use GMP::Mpz qw(mpz); 402 use GMP::Mpf qw(mpf); 403 GMP::printf ("%d %d %s", 123, mpz(2)**128, 'foo'); 404 GMP::printf STDERR "%.40f", mpf(1.234); 405 406 In perl 5.6.1 it doesn't seem to work to export C<printf>, the plain builtin 407 C<printf> is reached unless calls are C<&printf()> style. Explicit use of 408 C<GMP::printf> is suggested. C<sprintf> doesn't suffer this problem. 409 410 use GMP qw(sprintf); 411 use GMP::Mpq qw(mpq); 412 $s = sprintf "%x", mpq(15,16); 413 414 C<version> is not exported by default or by tag :all, calling it as 415 C<GMP::version()> is recommended. It returns the GMP library version 416 string, which is not to be confused with the module version number. 417 418 The other GMP module functions behave as per the corresponding GMP routines, 419 and accept any integer, string, float, mpz, mpq or mpf. For example, 420 421 use GMP qw(:all); 422 use GMP::Mpz qw(mpz); 423 $z = mpz(123); 424 print sgn($z); # gives 1 425 426 Because each of GMP::Mpz, GMP::Mpq and GMP::Mpf is a sub-class of GMP, 427 C<-E<gt>> style calls work too. 428 429 use GMP qw(:all); 430 use GMP::Mpq qw(mpf); 431 $q = mpq(-5,7); 432 if ($q->integer_p()) # false 433 ... 434 435 =head2 GMP::Rand 436 437 This class provides objects holding an algorithm and state for random number 438 generation. C<randstate> creates a new object, for example, 439 440 use GMP::Rand qw(randstate); 441 $r = randstate(); 442 $r = randstate('lc_2exp_size', 64); 443 $r = randstate('lc_2exp', 43840821, 1, 32); 444 $r = randstate('mt'); 445 $r = randstate($another_r); 446 447 With no parameters this corresponds to the C function 448 C<gmp_randinit_default>, and is a compromise between speed and randomness. 449 'lc_2exp_size' corresponds to C<gmp_randinit_lc_2exp_size>, 'lc_2exp' 450 corresponds to C<gmp_randinit_lc_2exp>, and 'mt' corresponds to 451 C<gmp_randinit_mt>. Or when passed another randstate object, a copy of that 452 object is made. 453 454 'lc_2exp_size' can fail if the requested size is bigger than the internal 455 table provides for, in which case undef is returned. The maximum size 456 currently supported is 128. The other forms always succeed. 457 458 A randstate can be seeded with an integer or mpz, using the C<seed> method. 459 /dev/random might be a good source of randomness, or time() or 460 Time::HiRes::time() might be adequate, depending on the application. 461 462 $r->seed(time())); 463 464 Random numbers can be generated with the following functions, 465 466 =over 4 467 468 =item 469 470 mpf_urandomb, mpz_rrandomb, mpz_urandomb, mpz_urandomm, 471 gmp_urandomb_ui, gmp_urandomm_ui 472 473 =back 474 475 Each constructs a new mpz or mpf and with a distribution per the 476 corresponding GMP function. For example, 477 478 use GMP::Rand (:all); 479 $r = randstate(); 480 $a = mpz_urandomb($r,256); # uniform mpz, 256 bits 481 $b = mpz_urandomm($r,mpz(3)**100); # uniform mpz, 0 to 3**100-1 482 $c = mpz_rrandomb($r,1024); # special mpz, 1024 bits 483 $f = mpf_urandomb($r,128); # uniform mpf, 128 bits, 0<=$f<1 484 $f = gmp_urandomm_ui($r,56); # uniform int, 0 to 55 485 486 =head2 Coercion 487 488 Arguments to operators and functions are converted as necessary to the 489 appropriate type. For instance C<**> requires an unsigned integer exponent, 490 and an mpq argument will be converted, so long as it's an integer in the 491 appropriate range. 492 493 use GMP::Mpz (mpz); 494 use GMP::Mpq (mpq); 495 $p = mpz(3) ** mpq(45); # allowed, 45 is an integer 496 497 It's an error if a conversion to an integer or mpz would cause any 498 truncation. For example, 499 500 use GMP::Mpz (mpz); 501 $p = mpz(3) + 1.25; # not allowed 502 $p = mpz(3) + mpz(1.25); # allowed, explicit truncation 503 504 Comparisons, however, accept any combination of operands and are always done 505 exactly. For example, 506 507 use GMP::Mpz (mpz); 508 print mpz(3) < 3.1; # true 509 510 Variables used on the left of an assignment operator like C<+=> are subject 511 to coercion too. An integer, float or string will change type when an mpz, 512 mpq or mpf is applied to it. For example, 513 514 use GMP::Mpz (mpz); 515 $a = 1; 516 $a += mpz(1234); # $a becomes an mpz 517 518 =head2 Overloading 519 520 The rule for binary operators in the C<overload> mechanism is that if both 521 operands are class objects then the method from the first is used. This 522 determines the result type when mixing GMP classes. For example, 523 524 use GMP::Mpz (mpz); 525 use GMP::Mpq (mpq); 526 use GMP::Mpf (mpf); 527 $z = mpz(123); 528 $q = mpq(3,2); 529 $f = mpf(1.375) 530 print $q+$f; # gives an mpq 531 print $f+$z; # gives an mpf 532 print $z+$f; # not allowed, would lose precision 533 534 =head2 Constants 535 536 A special tag C<:constants> is recognised in the module exports list. It 537 doesn't select any functions, but indicates that perl constants should be 538 GMP objects. This can only be used on one of GMP::Mpz, GMP::Mpq or GMP::Mpf 539 at any one time, since they apply different rules. 540 541 GMP::Mpz will treat constants as mpz's if they're integers, or ordinary 542 floats if not. For example, 543 544 use GMP::Mpz qw(:constants); 545 print 764861287634126387126378128,"\n"; # an mpz 546 print 1.25,"\n"; # a float 547 548 GMP::Mpq is similar, treating integers as mpq's and leaving floats to the 549 normal perl handling. Something like 3/4 is read as two integer mpq's and a 550 division, but that's fine since it gives the intended fraction. 551 552 use GMP::Mpq qw(:constants); 553 print 3/4,"\n"; # an mpq 554 print 1.25,"\n"; # a float 555 556 GMP::Mpf will treat all constants as mpf's using the default precision. 557 BEGIN blocks can be used to set that precision while the code is parsed. 558 For example, 559 560 use GMP::Mpf qw(:constants); 561 BEGIN { GMP::Mpf::set_default_prec(256); } 562 print 1/3; 563 BEGIN { GMP::Mpf::set_default_prec(64); } 564 print 5/7; 565 566 A similar special tag :noconstants is recognised to turn off the constants 567 feature. For example, 568 569 use GMP::Mpz qw(:constants); 570 print 438249738748174928193,"\n"; # an mpz 571 use GMP::Mpz qw(:noconstants); 572 print 438249738748174928193,"\n"; # now a float 573 574 All three 'integer', 'binary' and 'float' constant methods are captured. 575 'float' is captured even for GMP::Mpz and GMP::Mpq since perl by default 576 treats integer strings as floats if they don't fit a plain integer. 577 578 =head1 SEE ALSO 579 580 GMP manual, L<perl>, L<overload>. 581 582 =head1 BUGS 583 584 In perl 5.005_03 on i386 FreeBSD, the overloaded constants sometimes provoke 585 seg faults. Don't know if that's a perl bug or a GMP module bug, though it 586 does seem to go bad before reaching anything in GMP.xs. 587 588 There's no way to specify an arbitrary base when converting a string to an 589 mpz (or mpq or mpf), only hex or octal with 0x or 0 (for mpz and mpq, but 590 not for mpf). 591 592 These modules are not reentrant or thread safe, due to the implementation of 593 the XSUBs. 594 595 Returning a new object from the various functions is convenient, but 596 assignment versions could avoid creating new objects. Perhaps they could be 597 named after the C language functions, eg. mpq_inv($q,$q); 598 599 It'd be good if C<num> and C<den> gave lvalues so the underlying mpq could 600 be manipulated. 601 602 C<printf> could usefully accept %b for mpz, mpq and mpf, and perhaps %x for 603 mpf too. 604 605 C<get_str> returning different style values for integer versus float is a 606 bit unfortunate. With mpz, mpq and mpf objects there's no doubt what it 607 will do, but on a plain scalar its action depends on whether the scalar was 608 promoted to a float at any stage, and then on the GMP module rules about 609 using the integer or float part. 610 611 =head1 INTERNALS 612 613 In usual perl object style, an mpz is a reference to an object blessed into 614 class C<GMP::Mpz>. The object holds a pointer to the C language C<mpz_t> 615 structure. Similarly for mpq, mpf and randstate. 616 617 A free list of mpz and mpq values is kept to avoid repeated initializing and 618 clearing when objects are created and destroyed. This aims to help speed, 619 but it's not clear whether it's really needed. 620 621 mpf doesn't use a free list because the precision of new objects can be 622 different each time. 623 624 No interface to C<mpf_set_prec_raw> is provided. It wouldn't be very useful 625 since there's no way to make an operation store its result in a particular 626 object. The plain C<set_prec> is useful though, for truncating to a lower 627 precision, or as a sort of directive that subsequent calculations involving 628 that variable should use a higher precision. 629 630 The overheads of perl dynamic typing (operator dispatch, operand type 631 checking or coercion) will mean this interface is slower than using C 632 directly. 633 634 Some assertion checking is available as a compile-time option. 635 636 =head1 COPYRIGHT 637 638 Copyright 2001-2004 Free Software Foundation, Inc. 639 640 This file is part of the GNU MP Library. 641 642 The GNU MP Library is free software; you can redistribute it and/or modify 643 it under the terms of either: 644 645 * the GNU Lesser General Public License as published by the Free 646 Software Foundation; either version 3 of the License, or (at your 647 option) any later version. 648 649 or 650 651 * the GNU General Public License as published by the Free Software 652 Foundation; either version 2 of the License, or (at your option) any 653 later version. 654 655 or both in parallel, as here. 656 657 The GNU MP Library is distributed in the hope that it will be useful, but 658 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 659 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 660 for more details. 661 662 You should have received copies of the GNU General Public License and the 663 GNU Lesser General Public License along with the GNU MP Library. If not, 664 see https://www.gnu.org/licenses/. 665 666 =cut 667 668 # Local variables: 669 # perl-indent-level: 2 670 # fill-column: 76 671 # End: