]> git.lizzy.rs Git - plan9front.git/blob - sys/man/1/pc
ssh(1): initial documentation, needs examples for authentication
[plan9front.git] / sys / man / 1 / pc
1 .TH PC 1
2 .SH NAME
3 pc \- programmer's calculator
4 .SH SYNOPSIS
5 .B pc
6 [
7 .B -n
8 ]
9 .SH DESCRIPTION
10 .I Pc
11 is an arbitrary precision calculator with a special emphasis on supporting two's complement bit operations and working with different number bases.
12 .PP
13 .I Pc
14 reads input statements which are either expressions or control statements.
15 Multiple statements in one line can be separated by semicolons.
16 .I Pc
17 prints the value of all expressions that are not terminated by a semicolon.
18 .PP
19 .I Pc
20 can be run non-interactively by using the
21 .B -n
22 switch. In this case no input prompt is printed.
23 .PP
24 Expressions can use the C-like operators
25 .TP
26 .B + - * ** \fR(exponentiation\fR)
27 .TP
28 .B / % \fR(Euclidean division, by default\fR)
29 .TP
30 .B "& | ^ ~ ! << >>"
31 .TP
32 .B "&& || \fR(returning the second argument, if appropriate)"
33 .TP
34 .B < >= < <= == !=
35 .PP
36 Variables can be defined using
37 .BR = .
38 The builtin variable
39 .B @
40 always refers to the last printed result.
41 .PP
42 Numbers can use the prefixes
43 .B 0b
44 (binary), 
45 .B 0
46 (octal),
47 .B 0d
48 (decimal) and
49 .B 0x
50 (hexadecimal).
51 .B _
52 in numbers can be added for readability and is ignored.
53 .SS Builtin functions
54 .TF \fIcat(a0,n0,...,aN,nN)
55 .TP
56 .I bin(n)
57 Display \fIn\fR in binary.
58 .TP
59 .I oct(n)
60 Display \fIn\fR in octal.
61 .TP
62 .I dec(n)
63 Display \fIn\fR in decimal.
64 .TP
65 .I hex(n)
66 Display \fIn\fR in hexadecimal.
67 .TP
68 .I pb(n, b)
69 Display \fIn\fR in base \fIb\fR (currently must be one of 0, 2, 8, 10, 16; 0 uses the defined output base).
70 .TP
71 .I abs(n)
72 Absolute value of \fIn\fR.
73 .TP
74 .I round(n,m)
75 \fIn\fR rounded to the nearest multiple of \fIm\fR.
76 Numbers exactly halfway between are rounded to the next even multiple.
77 .TP
78 .I floor(n,m)
79 \fIn\fR rounded down to the next multiple of \fIm\fR.
80 .TP
81 .I ceil(n,m)
82 \fIn\fR rounded up to the next multiple of \fIm\fR.
83 .TP
84 .I trunc(n,m)
85 \fIn\fR truncated to \fIm\fR bits.
86 .TP
87 .I xtend(n,m)
88 \fIn\fR truncated to \fIm\fR bits, with the highest bit interpreted as a sign bit.
89 .TP
90 .I rev(n,m)
91 \fIn\fR truncated to \fIm\fR bits, with the order of bits reversed.
92 .TP
93 .I ubits(n)
94 The minimum number of bits required to represent \fIn\fR as an unsigned number.
95 .TP
96 .I sbits(n)
97 The minimum number of bits required to represent \fIn\fR as an signed number.
98 .TP
99 .I nsa(n)
100 The number of bits set in \fIn\fR.
101 .TP
102 .I cat(a\d\s70\s0\u,n\d\s70\s0\u,...,a\d\s7N\s0\u,n\d\s7N\s0\u)
103 Truncate each of the \fIa\d\s7i\s0\u\fR arguments to \fIn\d\s7i\s0\u\fR bits and concatenate their binary representation.
104 .TP
105 .I gcd(n,m)
106 The greatest common divisor of \fIn\fR and \fIm\fR.
107 .TP
108 .I clog(a,b)
109 The ceiling of the logarithm of \fIa\fR with respect to base \fIb\fR. \fIb\fR can be omitted, in which case it defaults to 2.
110 .TP
111 .I minv(n,m)
112 The inverse of \fIn\fR mod \fIm\fR.
113 .TP
114 .I rand(n)
115 A random number satisfying 0 ≤ \fIrand(n)\fR < \fIn\fR.
116 .SS Control statements
117 .PP
118 Control statements are always evaluated with default input base 10.
119 .TP
120 \fL_\fR \fIn\fR
121 If \fIn\fR ≠ 0, insert 
122 .B _
123 in all printed numbers, every
124 .I n
125 digits.
126 .TP
127 \fL<\fR \fIn\fR
128 Set the default input base to \fIn\fR (default 10).
129 The input base can always be overriden by the base prefixes defined above.
130 .TP
131 \fL>\fR \fIn\fR
132 Set the output base to \fIn\fR.
133 If \fIn\fR = 0 (default), print each number in the base it was input in.
134 .TP
135 \fL/\fR 0
136 Use Euclidean division (default).
137 \fIa\fR / \fIb\fR is rounded towards ±∞ (opposite sign as \fIb\fR).
138 \fIa\fR % \fIb\fR is always non-negative.
139 .TP
140 \fL/\fR 1
141 Use truncating division (same as C).
142 \fIa\fR / \fIb\fR is rounded towards zero.
143 \fIa\fR % \fIb\fR can be negative.
144 .TP
145 \fL\'\fR 1
146 Enable numbering bits (disable with 0).
147 If the base is a power of two, print the number of the corresponding bit above each digit.
148 .SH SOURCE
149 .B /sys/src/cmd/pc.y
150 .SH "SEE ALSO"
151 .IR bc (1),
152 .IR hoc (1)
153 .SH BUGS
154 With the input base set to 16, terms such as
155 .B ABC
156 are ambiguous.
157 They are interpreted as numbers only if there is no function or variable of the same name.
158 To force interpretation as a number, use the \fL0x\fR prefix.
159 .PP
160 Arbitrary bases should be supported, but are not supported by the
161 .IR mp (2)
162 string functions.
163 .SH HISTORY
164 .I Pc
165 first appeared in 9front (August, 2016).