1 | dc
|
2 | ===
|
3 |
|
4 | 任意精度计算器
|
5 |
|
6 | ## 说明
|
7 |
|
8 | dc 是一款逆波兰表达式计算器,支持无限制精度的算术运算。它还允许您定义和调用宏。通常,dc从标准输入读取,也可以通过参数传入文件来求值。
|
9 |
|
10 | ## 语法
|
11 |
|
12 | ```shell
|
13 | dc [选项] [文件...]
|
14 | ```
|
15 |
|
16 | ### 选项
|
17 |
|
18 | ```shell
|
19 | -e, --expression=EXPR # 评估表达式
|
20 | -f, --file=FILE # 评估文件内容
|
21 | -h, --help # 显示此帮助并退出
|
22 | -V, --version # 输出版本信息并退出
|
23 | ```
|
24 |
|
25 | ```shell
|
26 | p 打印堆栈顶部的值并以换行符结束语句。
|
27 | n 打印堆栈顶部的值并以空语句结束行。
|
28 | f 打印整个堆栈,不做任何更改。
|
29 | P 从栈顶弹出值。
|
30 | c 清除堆栈。
|
31 | d 复制顶部值并将其推入主堆栈。
|
32 | r 反转堆栈中顶部两个元素的顺序。
|
33 | Z 从堆栈中弹出值,计算其中的位数并压入该数字。
|
34 | X 从堆栈中弹出值,计算其中的小数位数并压入该数字。
|
35 | z 将堆栈长度推入堆栈。
|
36 | i 从堆栈中弹出值并将其用作输入基数。
|
37 | o 从堆栈中弹出值并将其用作输出基数。
|
38 | k 从堆栈中弹出值并使用它来设置精度。
|
39 | I 将输入基数的值推入堆栈。
|
40 | O 将输出基数的值压入堆栈
|
41 | K 将精度值压入堆栈。
|
42 | ```
|
43 |
|
44 | ## 示例
|
45 |
|
46 | 下面是 `dc` 命令在命令行完成的计算 `10 * 10` 得出结果 `100`,并推出的过程
|
47 |
|
48 | ```shell
|
49 | $ dc
|
50 |
|
51 | 10 # 1. 输入数字10
|
52 | 10 # 2. 输入数字10
|
53 | * # 3. 输入运算类型*表示乘
|
54 | p # 4. 输入p得到计算结果
|
55 | 100
|
56 | q # 5. 输入 q 退出 dc
|
57 | ```
|
58 |
|
59 | 示例显示在命令行结果 `509`
|
60 |
|
61 | ```bash
|
62 | $ dc --expression="50 10 * 9 + p"
|
63 | 509
|
64 | ```
|
65 |
|
66 | ## 支持的运算
|
67 |
|
68 | `+` 从堆栈中弹出两个值,将它们相加,然后压栈结果。
|
69 |
|
70 | `-` 弹出两个值,从弹出的第二个值中减去弹出的第一个值,并压栈结果。
|
71 |
|
72 | `*` 弹出两个值,将它们相乘,然后压栈结果。结果中分数位数取决于当前精度值和两个参数中的分数位数。
|
73 |
|
74 | `/` 弹出两个值,将弹出的第二个值与弹出的第一个值相除,然后推送结果。分数位数由精度值指定。
|
75 |
|
76 | `%` 弹出两个值,计算/命令将执行的除法的剩余部分,并推送该值。计算的值与序列 `Sd dld/Ld*- `计算的值相同。
|
77 |
|
78 | `~` 弹出两个值,将弹出的第二个值与弹出的第一个值相除。首先推送商,然后推送余数。除法中使用的小数位数由精度值指定。
|
79 |
|
80 | (序列 SdSn lnld/lnld% 也可以完成此功能,但错误检查略有不同。)
|
81 |
|
82 |
|
83 | `^` 使用弹出的第一个值作为指数,第二个值作为基数,弹出两个值并进行幂运算。忽略指数的分数部分。
|
84 |
|
85 | `|` 弹出三个值并计算模幂。 弹出的第一个值用作约简模数; 这个值必须是一个非零数字,并且应该是一个整数。 弹出的第二个用作指数; 该值必须是非负数,并且该指数的任何小数部分都将被忽略。 弹出的第三个值是取幂的基数,它应该是一个整数。 对于小整数,这类似于序列 Sm^Lm%,但与 ^ 不同的是,此命令适用于任意大的指数。
|
86 |
|
87 | `v` 弹出一个值,计算其平方根,然后压栈它。精度值的最大值和参数的精度用于确定结果中的小数位数。
|