在 shell 中使用 bc 更好地做算数,它是一种用于高级计算的数学语言。

大多数 POSIX 系统带有 GNU bc,这是一种任意精度的数字处理语言。它的语法类似于 C,但是它也支持交互式执行语句和处理来自标准输入(stdin)的数据。因此,它通常是以下问题的答案:“我如何在 Linux shell 中进行数学运算?”这种回应方式在网上很常见:

$echo"1+1"|bc

2

尽管这是完全正确的,但很少有用户认为,与更直观的方式相比,它很优雅,例如:

$1+1#这不能工作

2

交互模式要容易一些:

$ bc

1+1

2

quit

$

但是交互模式并不总是适合简单计算想要的直观工作流,比如直接输入你想要的计算。因此我推荐 Bluebat 的纯 Bash 计算器。

bc 实际上提供了一种用于高级计算的数学语言。

含高级函数的 mathlib

bc 本身提供了基本的数学函数。你可以在交互式模式下测试它们:

$ bc

3^2

9

(3^2)*(9)/3

27

使用 --mathlib 选项获取高级函数,包括正弦、余弦、正切等。在交互式模式下,你可以测试其中一些。下面是 90 度的余弦:

c(90)

-.44807361612917015236

9 的正弦:

s(9)

.41211848524175656975

创建你自己的 bc 函数

你还可以在 bc 中创建自己的函数。函数定义以 define 关键字开始,并用大括号括起来。下面是一个输入到交互式会话中的简单函数,它返回给它的任意数字:

$ bc

defineecho(n){

return(n);

}

在同一个交互式会话中,测试一下:

echo(2)

2

echo(-2)

-2

bc 中的 if 语句

bc 语言还有各种控制语句,其中最简单的是 if/else。语法乍一看可能很熟悉,但在如何处理大括号方面有些不同。请注意,if 语句的 else 子句包含在大括号中,而 then 子句不是,但两者都用分号终止。下面是一个返回数字 n 的绝对值的函数:

defineabso(n){

if(n>0)return(n);

{return(-n);}

}

在同一个交互式会话中,测试一下:

abso(-5)

5

abso(5)

5

将数据导入 bc

使用交互式会话对于快速计算和实验是可以容忍的,但在退出时会丢失数据,并且在出错时很难编辑。幸运的是,bc 可以从外部文件加载变量和函数。

下面是一个包含两个变量(sol 和 foo)的文件,以及一个用于查找绝对值的自定义 abso 函数:

sol=299792458

foo=42

defineabso(n){

if(n>0)return(n);

{return(-n);}

}

将它保存到名为 bcvars.bc 的文件中,以便导入 bc 交互式会话:

$ bc bcvars.bc

foo

42

sol

299792458

abso(-23)

23

使用 bc 助力你的数学

bc 语言相对简单,前提是你知道足够的数学知识来构造任何你想完成的方程。虽然 bc 默认提供了有用的基本函数,并允许你创建自己的函数,但你可以通过站在巨人的肩膀上来减少工作量。加载了用于数学基础知识和特定任务(例如,计算复利)的新函数的文件可从 GNU bc 页获得,同时也可获得 bc 完整文档。

如果你有兴趣在 shell 里更好地处理数学,试试 bc 。它不会使你成为数学天才,但它可能会让过程更简单。

【编辑推荐】

【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0

linux中bc用法英文,使用GNU bc在Linux Shell中进行数学运算相关推荐

  1. tf第四讲:tf中的循环tf.while_loop,条件tf.cond,比较、数学运算、类型转换

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  2. linux查看mongodb的ip地址,[转载]在MongoDB的shell中显示服务器当前IP

    不久前发生一起严重的事故,误删了生产MongoDB服务器上的一个collection,由于没有定时备份,导致几天的数据丢失.认真反省之后,写下这篇文章,希望能给大家一些警示. 过程 当时我正双开两个终 ...

  3. linux远程登录maridb,linux – 无法使用phpMyAdmin登录到远程MariaDB服务器,但在shell中工作...

    我最近配置了两台服务器.第一个使用Apache和PHPMyAdmin.在另一台服务器上,我正确配置了maria-DB服务器. PHPMyAdmin它正在读取配置文件,但我无法连接到MariaDB服务器 ...

  4. 用什么linux命令中删除提交的作业,disown – 从当前的shell中移除作业。 - Linux 命令大全...

    从当前的shell中移除作业. 概要 disown [-h] [-ar] [jobspec ... | pid ...] 主要用途 从当前shell的作业列表中移除全部作业. 从当前shell的作业列 ...

  5. linux命令行选项英文全称,【转载】Linux命令英文全称(方便理解)

    命令缩写: ls:list(列出目录内容) cd:Change Directory(改变目录) su:switch user 切换用户 rpm:redhat package manager 红帽子打包 ...

  6. python管道怎么使用_python中管道用法入门实例

    python中管道用法入门实例 本文实例讲述了python中管道用法.分享给大家供大家参考.具体如下: #!coding=utf-8 import multiprocessing def consum ...

  7. linux的shell的功能,linux shell中${ }的一些特异功能

    linux shell中${ }的一些特异功能,这部分内容是shell中的比较经典的部分之一,建议认真学习,深刻体会. 假设我们定义一个变量为: file=/dir1/dir2/dir3/my.fil ...

  8. linux字符集设置为英文,NLS_lang参数设置-linux设置字符集(国外英文资料).doc

    NLS_lang参数设置-linux设置字符集(国外英文资料) 奉菱砰台沉朽签屋玫庚撤骂这臼稠兢掠呆电砾呀萝邦天部辨残涅劫勿炕赘族甫最逆谢店勿鞋子胯污助卑叛滓耪汲矢容谐薪噪惧缎羡绎缘寐懈绊件秃拓轮氛牧 ...

  9. linux中用less命令,Linux less 命令用法详解

    原标题:Linux less 命令用法详解 less 是一个Linux命令行实用程序,用于显示文件或命令输出的内容,它一次只显示一个页面.它类似于 more ,但具有更高级的功能,允许您在文件中向前和 ...

最新文章

  1. python:解决UnicodeDecodeError
  2. 20180625笔记
  3. es7 bulk api 批量插入es
  4. Mysql count 的多种使用方式性能比较
  5. anaconda管理不同版本Python
  6. php 中 app cookie管理,详解iOS App开发中Cookie的管理方法
  7. matlab fopen wt,matlab的fopen和fprintf
  8. 并发教程--JAVA5中 计数信号量(Counting Semaphore)例子
  9. 【ACL2020】BERT如何融合主题模型做文本匹配
  10. 第九届蓝桥杯大赛青少年创意编程 SCRATCH 初级组试题解析
  11. 移动硬盘与电脑连接后 计算机中找不到,移动硬盘连接电脑后不显示盘符怎么办...
  12. 浅谈利用javascript实现gb2312编码。
  13. 开源项目推荐 | 面向智慧城市的计算机视觉算法基准测试 Benchmark for Smart City上线
  14. 2015CDAS中国数据分析师行业峰会:R语言量化投资数据分析应用
  15. V-Play 跨平台Game、App开发框架
  16. ie退出全屏快捷键_IE浏览器快捷键,IE浏览器全屏快捷键
  17. Windows安装TVM详细教程及报错提示
  18. anaconda如何创建一个新的环境
  19. 面向对象的有限元代码:OOFEM
  20. TAG-9F10 发卡行相关数据(转)

热门文章

  1. FreeSql (二十八)事务
  2. Django权限系统auth模块详解
  3. Ajax实现原理详解
  4. win2008r2 AD用户账户的批量导入方法
  5. BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划
  6. 百万记录级MySQL数据库及Discuz!论坛优化
  7. 关于禁止svn客户端长驻内存的方法
  8. 定制化你的ReactNative底部导航栏
  9. mysql导入source注意点
  10. tfs文件系统之NS配置管理