bc-一种支持任意精度的计算语言

上传人:w****i 文档编号:106107525 上传时间:2019-10-14 格式:PDF 页数:14 大小:427.27KB
返回 下载 相关 举报
bc-一种支持任意精度的计算语言_第1页
第1页 / 共14页
bc-一种支持任意精度的计算语言_第2页
第2页 / 共14页
bc-一种支持任意精度的计算语言_第3页
第3页 / 共14页
bc-一种支持任意精度的计算语言_第4页
第4页 / 共14页
bc-一种支持任意精度的计算语言_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《bc-一种支持任意精度的计算语言》由会员分享,可在线阅读,更多相关《bc-一种支持任意精度的计算语言(14页珍藏版)》请在金锄头文库上搜索。

1、bcbc an arbitrary precision calculator languagean arbitrary precision calculator language ( (一种支持任意精度一种支持任意精度的计算语言的计算语言) ) version 1.06version 1.06 Philip A. NelsonPhilip A. Nelson 翻译:翻译:Wanghong Lin(mutter) Wanghong Lin(mutter) wh.lin63 wh.lin63 Table of ContentsTable of Contents( (目录目录) ) Introduc

2、tion o Description o Command Line Options Basic Elements o Numbers o Variables o Comments Expressions o About Expressions and Special Variables o Basic Expressions o Relational Expressions o Boolean Expressions o Precedence o Special Expressions Statements o Pseudo Statements Functions o Math Librar

3、y Functions Examples Readline and Libedit Options GNU bc and Other Implementations Limits Environment Variables IntroductionIntroduction DescriptionDescription bc -hlwsqv long-options file . 以其说 bc 是一个命令行下的计算工具, 不如说它是一种编程语言。 这如同 Unix 下面另 外两种流行的文本处理工具 awk 和 sed 一样, 为了方便, 我们可以直接在命令行当中交互执 行语句,当然,更加更加传统

4、的方式就是把 bc 的计算命令都写入一个文件当中,然后执行 该文件。bc 支持任意精度的数字运算。亦犹如其它 Unix 下的许多工具,bc 在语法上面和 C 语言有许多相似的地方。bc 处理过程如下: 可以在命令行的选项当中指定一个标准的数学库,在处理任何其它的文件之前,bc 先 处理该数学库。 然后 bc 会顺序依次执行命令行中指定的文件当中的代码。 处理完这些之后,bc 从标准输入读取内容,然后执行读入的内容。(注:如果在 bc 处 理文件的时候,执行了退出 bc 处理的命令,将不会从标准输入读取任何内容) 相对于传统的 bc 工具和 POSIX 草案标准,该版本的 bc 包含了几条扩展。

5、当然,bc 和 前两种是兼容的, 可以通过命令行中指定参数打印关于这些扩展的警告信息, 甚至也可以完 全禁用这些扩展。该文档描述了该版本的 bc 可以接受的语言规范,关于扩展的部分都会标 识出来。 作者非常感谢 Steve Sommars (Steve.Sommars )为测试该工具提供的热情帮 助。同时给予了许多非常好的建议,他投入了许多的时间和精力,使该工具变得更加完美。 Email bug reports to bug-bcgnu.org。记得要在邮件的“Subject:”栏加入“bc” 的关键字。 CommCommand Line Optionsand Line Options bc

6、可以从命令行当中接受如下的命令: -h, -help 打印相关用法并推出. -l, -mathlib 定义标准数学库. -w, -warn 给出不符合 POSIX bc 标准的警告提示. -s, -standard 处理的内容完全符合 POSIX bc 标准. -q, -quiet 不显示一些欢迎信息. -v, -version 打印版本和版权信息,然后退出. Basic ElementsBasic Elements NumbersNumbers 在 bc 当中, 任意精度的数字是最基础的概念。 这种数字精度包括整数部分和分数部分。 所有的数字在内部的呈现方式和计算处理方式都是十进制。 (该版

7、本舍弃了结果当中的乘除 操作。)对于数字有两种属性,长度(length)和精度(scale)。长度是指整个数字的位 数,精度是指小数点后面的位数。比如.000001 的 length 是 6,scale 也是 6,1935.000 的 长度是 7,精度是 3。 VariablesVariables 数字式存放在两种地方, 简单的变量当中和数组当中。 两者都是通过名字的方式来标识, 名字以小写字母开头,后面跟着任意的小写字母,数字和下划线。 (多个字母数字的名字是 bc 的扩展,在 POSIX bc 当中,所有的名字必须是单个的小写字母。)因为所有的数组都是 以名字加一个中括号()的方式表示,所

8、以变量的类型是有其内容决定。 有四种特定的变量类型,scale,ibase,obase,和 last。scale 规定了小数点后面的 位数,ibase 规定输入的进制,obase 规定输出的进制。输入输出的默认进制都是 10。last (一个扩展) 包含的是最后一个打印的数值。 这几个变量, 将会在后面有需的时候详细描述。 所有这些变量,都可以直接赋值,并可以直接在表达式(Expression)中使用。 CommentsComments 所有的注释都是以/*开头,以*/作为结尾。注释可以从任何地方开始,并且当做一个空 格来对待。 (这样子可以把注释和其它注释清楚的划分开来,比如注释不能放在一个

9、变量名 的中间)。在注释的开头和结尾之间可以包括换行。 为了支持 bc 使用脚本,单行的注释作为一个扩展而加入。以“#”开头的的每一行都作 为一段注释,到该行的结束。 ExpressionsExpressions About Expressions and Special VariablesAbout Expressions and Special Variables 数是通过表达式和语句进行处理的。因为 bc 语言最初设计是交互式的,表达式和语句 可以直接被执行。没有 C 中所谓的主函数。取而代之的是,bc 每遇到代码都是直接执行。 (函数,将在后面详细介绍,在执行之前,不需预先定义)。 一

10、个简单的表达式仅仅是一个常数。bc 根据当前变量 ibase 中指定的进制把输入的常 数转化为内部的十进制数。 (在函数当中有一个例外) ibase 变量的有效值为 216 (包括) , 若赋值该范围以外的任何值给 ibase 变量,ibase 的最终值还是会在上面说的范围之内。输 入的字符可以包括 0-9,A-F 范围内的任意字符。(注:必须是大写,小写字母是用来标识 变量名的)。对于单个的数,不管 ibase 的值为什么,bc 都是以原本的值进行处理。(比 如,A = 10,F = 15,无论 ibase 设为什么,前两两个都是不变的)。对于多个的数,bc 将改变那些大于当前设置的 iba

11、se 值的数为 ibase 1(比如,$ echo “AAA“ | bc 得到的 值将为 999,而$ echo “ibase=16;AAA“ | bc 将得到 2730)。这就使 FFF 始终都是最大的 三位数,不管 ibase 如何设置。 复杂一点的表达式和其它一些高级语言当中的很相似。 因为只有一种类型的数, 对于混 合类型没有什么规则。取而代之的是,表达式有精度的要求。每一个表达式都有一个精度, 该精度由最初始的数,相应的操作,变量的精度决定的。合法的变量的精度范围是从 0 到 C 语言可以表示的范围。 Basic ExpressionsBasic Expressions 下面描述的合

12、法表达式当中,“expr”指的是一个完整的表达式,“var”指的是一个 简单的或者数组变量。一个简单的变量表示为 name 而一个数组变量由以下方式制定 nameexpr 除了特殊提到,下面的精度是表达式可以处理的最大精度 - expr 结果是对表达式的值求反. + var 结果是表达式的值自加 1. - var 结果是表达式的值自减 1. var + 结果是表达式的值,然后表达式的值自加 1. var - 结果是表达式的值,然后表达式的值自减 1. expr + expr 结果是两个表达式相加的值. expr - expr 结果是两个表达式的值的差. expr * expr 结果是两个表达式

13、的值的乘积. expr / expr 结果是两个表达式的值的商,精度有 scale 指定。 expr % expr 结果是余数, 并且是通过下面方式计算的.为了计算 a%b, 首先执行 a/b 得到一定精 度的结果。然后该结果以scale+scale(b)和 scale(a)中的较大值为 scale 计算 a-(a/b)*b。如果scale 设置为零,同时两个都是表达式都是整数,该表达式就是 用来求整数的余数的。 expr expr 该表达式的结果是第一个表达式的第二个表达式次幂。 第二个表达式必须是整数。 (如果第二个表达式不是整数, 将产生一个警告信息, 并且截取第二个表达式获得整 数)

14、如果指数为负数,结果的精度将取当前设置的精度。如果指数值整数,结果的 精度将这么计算,scale(ab) = min(scale(a)*b, max(scale, scale(a)。注意 的是任何数零次幂都是 1。即使是零的零次方也是 1 ( expr ) 改变标准的执行步骤,优先执行括号里面的表达式。 var = expr 表达式的值赋值给变量。 var = expr 复合的赋值语句。等同于“var = var expr“除了“var“ 不是执行一次的。如果 这里“var“ 是一个数组,结果将有所不同。 Relational ExpressionsRelational Expressions

15、 关系表达式是一种特殊的表达式,如果为真(true) ,取值将是 1,如果是假(false) 取值取值将是 2。这些也通常出现在其它表达式当中。 (POSIX bc 规定关系表达式只能出现 一次在 if,while,和 for 语句当中)下面列出了所有关系表达式: expr1 = expr2 如果 expr1 大于等于 expr2,结果将是 1。 expr1 = expr2 如果 expr1 完全等于 expr2,结果将是 1。 expr1 != expr2 如果 expr1 不等于 expr2 的值,结果将是 1。 Boolean ExpressionsBoolean Expressions

16、 布尔操作也是合法的。 (在 POSIX bc 当中,没有布尔操作) 。如同在关系表达式中的操 作一样,布尔表达式的值也是只有 0(false)和 1(true) 。分别列举如下: !expr 如果表达式的值为 0,结果将是 1 expr 37“ | bc 得到的结果是 01 17。位权的值最大为 obase 1。因为数字是任意精度的,一些数字可能在一行中无法全部打印出来。这些长的数字将 通过反斜杠分隔成多行。每行最大打印 70 个字符。由于 bc 设计为交互性的,在屏幕上打印 一个数的值,对于把打印的变量赋值给特殊变量 last 将产生消极的影响。这样子,用户可以 恢复最后一个打印的值, 而不用重新敲入可以打印那个值的表达式。 直接给 last 变量赋值是 合法的,并且恢复覆盖 last

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号