Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / v8plus / man / man3 / bigint.3
CommitLineData
920dae64
AT
1.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32
2.\"
3.\" Standard preamble:
4.\" ========================================================================
5.de Sh \" Subsection heading
6.br
7.if t .Sp
8.ne 5
9.PP
10\fB\\$1\fR
11.PP
12..
13.de Sp \" Vertical space (when we can't use .PP)
14.if t .sp .5v
15.if n .sp
16..
17.de Vb \" Begin verbatim text
18.ft CW
19.nf
20.ne \\$1
21..
22.de Ve \" End verbatim text
23.ft R
24.fi
25..
26.\" Set up some character translations and predefined strings. \*(-- will
27.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28.\" double quote, and \*(R" will give a right double quote. | will give a
29.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
30.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
31.\" expand to `' in nroff, nothing in troff, for use with C<>.
32.tr \(*W-|\(bv\*(Tr
33.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
34.ie n \{\
35. ds -- \(*W-
36. ds PI pi
37. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
39. ds L" ""
40. ds R" ""
41. ds C` ""
42. ds C' ""
43'br\}
44.el\{\
45. ds -- \|\(em\|
46. ds PI \(*p
47. ds L" ``
48. ds R" ''
49'br\}
50.\"
51.\" If the F register is turned on, we'll generate index entries on stderr for
52.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53.\" entries marked with X<> in POD. Of course, you'll have to process the
54.\" output yourself in some meaningful fashion.
55.if \nF \{\
56. de IX
57. tm Index:\\$1\t\\n%\t"\\$2"
58..
59. nr % 0
60. rr F
61.\}
62.\"
63.\" For nroff, turn off justification. Always turn off hyphenation; it makes
64.\" way too many mistakes in technical documents.
65.hy 0
66.if n .na
67.\"
68.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69.\" Fear. Run. Save yourself. No user-serviceable parts.
70. \" fudge factors for nroff and troff
71.if n \{\
72. ds #H 0
73. ds #V .8m
74. ds #F .3m
75. ds #[ \f1
76. ds #] \fP
77.\}
78.if t \{\
79. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
80. ds #V .6m
81. ds #F 0
82. ds #[ \&
83. ds #] \&
84.\}
85. \" simple accents for nroff and troff
86.if n \{\
87. ds ' \&
88. ds ` \&
89. ds ^ \&
90. ds , \&
91. ds ~ ~
92. ds /
93.\}
94.if t \{\
95. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
101.\}
102. \" troff and (daisy-wheel) nroff accents
103.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110.ds ae a\h'-(\w'a'u*4/10)'e
111.ds Ae A\h'-(\w'A'u*4/10)'E
112. \" corrections for vroff
113.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115. \" for low resolution devices (crt and lpr)
116.if \n(.H>23 .if \n(.V>19 \
117\{\
118. ds : e
119. ds 8 ss
120. ds o a
121. ds d- d\h'-1'\(ga
122. ds D- D\h'-1'\(hy
123. ds th \o'bp'
124. ds Th \o'LP'
125. ds ae ae
126. ds Ae AE
127.\}
128.rm #[ #] #H #V #F C
129.\" ========================================================================
130.\"
131.IX Title "bigint 3"
132.TH bigint 3 "2001-09-21" "perl v5.8.8" "Perl Programmers Reference Guide"
133.SH "NAME"
134bigint \- Transparent BigInteger support for Perl
135.SH "SYNOPSIS"
136.IX Header "SYNOPSIS"
137.Vb 1
138\& use bigint;
139.Ve
140.PP
141.Vb 4
142\& $x = 2 + 4.5,"\en"; # BigInt 6
143\& print 2 ** 512,"\en"; # really is what you think it is
144\& print inf + 42,"\en"; # inf
145\& print NaN * 7,"\en"; # NaN
146.Ve
147.SH "DESCRIPTION"
148.IX Header "DESCRIPTION"
149All operators (including basic math operations) are overloaded. Integer
150constants are created as proper BigInts.
151.PP
152Floating point constants are truncated to integer. All results are also
153truncated.
154.Sh "Options"
155.IX Subsection "Options"
156bigint recognizes some options that can be passed while loading it via use.
157The options can (currently) be either a single letter form, or the long form.
158The following options exist:
159.IP "a or accuracy" 2
160.IX Item "a or accuracy"
161This sets the accuracy for all math operations. The argument must be greater
162than or equal to zero. See Math::BigInt's \fIbround()\fR function for details.
163.Sp
164.Vb 1
165\& perl -Mbigint=a,2 -le 'print 12345+1'
166.Ve
167.IP "p or precision" 2
168.IX Item "p or precision"
169This sets the precision for all math operations. The argument can be any
170integer. Negative values mean a fixed number of digits after the dot, and
171are <B>ignored</B> since all operations happen in integer space.
172A positive value rounds to this digit left from the dot. 0 or 1 mean round to
173integer and are ignore like negative values.
174.Sp
175See Math::BigInt's \fIbfround()\fR function for details.
176.Sp
177.Vb 1
178\& perl -Mbignum=p,5 -le 'print 123456789+123'
179.Ve
180.IP "t or trace" 2
181.IX Item "t or trace"
182This enables a trace mode and is primarily for debugging bigint or
183Math::BigInt.
184.IP "l or lib" 2
185.IX Item "l or lib"
186Load a different math lib, see \*(L"\s-1MATH\s0 \s-1LIBRARY\s0\*(R".
187.Sp
188.Vb 1
189\& perl -Mbigint=l,GMP -e 'print 2 ** 512'
190.Ve
191.Sp
192Currently there is no way to specify more than one library on the command
193line. This will be hopefully fixed soon ;)
194.IP "v or version" 2
195.IX Item "v or version"
196This prints out the name and version of all modules used and then exits.
197.Sp
198.Vb 1
199\& perl -Mbigint=v
200.Ve
201.Sh "Math Library"
202.IX Subsection "Math Library"
203Math with the numbers is done (by default) by a module called
204Math::BigInt::Calc. This is equivalent to saying:
205.Sp
206.Vb 1
207\& use bigint lib => 'Calc';
208.Ve
209.Sp
210You can change this by using:
211.Sp
212.Vb 1
213\& use bigint lib => 'BitVect';
214.Ve
215.Sp
216The following would first try to find Math::BigInt::Foo, then
217Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc:
218.Sp
219.Vb 1
220\& use bigint lib => 'Foo,Math::BigInt::Bar';
221.Ve
222.Sp
223Please see respective module documentation for further details.
224.Sh "Internal Format"
225.IX Subsection "Internal Format"
226The numbers are stored as objects, and their internals might change at anytime,
227especially between math operations. The objects also might belong to different
228classes, like Math::BigInt, or Math::BigInt::Lite. Mixing them together, even
229with normal scalars is not extraordinary, but normal and expected.
230.Sp
231You should not depend on the internal format, all accesses must go through
232accessor methods. E.g. looking at \f(CW$x\fR\->{sign} is not a good idea since there
233is no guaranty that the object in question has such a hash key, nor is a hash
234underneath at all.
235.Sh "Sign"
236.IX Subsection "Sign"
237The sign is either '+', '\-', 'NaN', '+inf' or '\-inf'.
238You can access it with the \fIsign()\fR method.
239.Sp
240A sign of 'NaN' is used to represent the result when input arguments are not
241numbers or as a result of 0/0. '+inf' and '\-inf' represent plus respectively
242minus infinity. You will get '+inf' when dividing a positive number by 0, and
243\&'\-inf' when dividing any negative number by 0.
244.Sh "Methods"
245.IX Subsection "Methods"
246Since all numbers are now objects, you can use all functions that are part of
247the BigInt \s-1API\s0. You can only use the \fIbxxx()\fR notation, and not the \fIfxxx()\fR
248notation, though.
249.Sh "Caveat"
250.IX Subsection "Caveat"
251But a warning is in order. When using the following to make a copy of a number,
252only a shallow copy will be made.
253.Sp
254.Vb 2
255\& $x = 9; $y = $x;
256\& $x = $y = 7;
257.Ve
258.Sp
259Using the copy or the original with overloaded math is okay, e.g. the
260following work:
261.Sp
262.Vb 2
263\& $x = 9; $y = $x;
264\& print $x + 1, " ", $y,"\en"; # prints 10 9
265.Ve
266.Sp
267but calling any method that modifies the number directly will result in
268\&\fBboth\fR the original and the copy beeing destroyed:
269.Sp
270.Vb 2
271\& $x = 9; $y = $x;
272\& print $x->badd(1), " ", $y,"\en"; # prints 10 10
273.Ve
274.Sp
275.Vb 2
276\& $x = 9; $y = $x;
277\& print $x->binc(1), " ", $y,"\en"; # prints 10 10
278.Ve
279.Sp
280.Vb 2
281\& $x = 9; $y = $x;
282\& print $x->bmul(2), " ", $y,"\en"; # prints 18 18
283.Ve
284.Sp
285Using methods that do not modify, but testthe contents works:
286.Sp
287.Vb 2
288\& $x = 9; $y = $x;
289\& $z = 9 if $x->is_zero(); # works fine
290.Ve
291.Sp
292See the documentation about the copy constructor and \f(CW\*(C`=\*(C'\fR in overload, as
293well as the documentation in BigInt for further details.
294.SH "MODULES USED"
295.IX Header "MODULES USED"
296\&\f(CW\*(C`bigint\*(C'\fR is just a thin wrapper around various modules of the Math::BigInt
297family. Think of it as the head of the family, who runs the shop, and orders
298the others to do the work.
299.Sp
300The following modules are currently used by bigint:
301.Sp
302.Vb 2
303\& Math::BigInt::Lite (for speed, and only if it is loadable)
304\& Math::BigInt
305.Ve
306.SH "EXAMPLES"
307.IX Header "EXAMPLES"
308Some cool command line examples to impress the Python crowd ;) You might want
309to compare them to the results under \-Mbignum or \-Mbigrat:
310.Sp
311.Vb 8
312\& perl -Mbigint -le 'print sqrt(33)'
313\& perl -Mbigint -le 'print 2*255'
314\& perl -Mbigint -le 'print 4.5+2*255'
315\& perl -Mbigint -le 'print 3/7 + 5/7 + 8/3'
316\& perl -Mbigint -le 'print 123->is_odd()'
317\& perl -Mbigint -le 'print log(2)'
318\& perl -Mbigint -le 'print 2 ** 0.5'
319\& perl -Mbigint=a,65 -le 'print 2 ** 0.2'
320.Ve
321.SH "LICENSE"
322.IX Header "LICENSE"
323This program is free software; you may redistribute it and/or modify it under
324the same terms as Perl itself.
325.SH "SEE ALSO"
326.IX Header "SEE ALSO"
327Especially bigrat as in \f(CW\*(C`perl \-Mbigrat \-le 'print 1/3+1/4'\*(C'\fR and
328bignum as in \f(CW\*(C`perl \-Mbignum \-le 'print sqrt(2)'\*(C'\fR.
329.Sp
330Math::BigInt, Math::BigRat and Math::Big as well
331as Math::BigInt::BitVect, Math::BigInt::Pari and Math::BigInt::GMP.
332.SH "AUTHORS"
333.IX Header "AUTHORS"
334(C) by Tels <http://bloodgate.com/> in early 2002 \- 2005.