Linux bc命令(bc指令)(基本计算器)(任意精度计算语言:支持浮点数运算、变量赋值和自定义函数等)

news2024/11/15 10:26:47

文章目录

  • bc命令文档
    • 英文
    • 中文
  • Linux `bc` 命令详解
    • `bc` 命令的基本用法
      • 启动 `bc` 环境
      • 进行基本计算
      • 退出 `bc`
    • `bc` 中的数学功能
      • 执行高级数学计算
        • 平方根和指数函数
        • 对数函数
      • 处理精度问题
    • 变量和数组
      • 变量赋值和使用
      • 数组的使用
    • 创建和使用自定义函数
  • `bc` 命令的高级用法
    • 在脚本中使用 `bc`
      • 基本脚本集成
      • 使用循环和条件语句
    • `bc` 中的高级数学和逻辑运算
      • 使用逻辑运算符
      • 三元运算符的使用(不支持原生语法,但是可模拟)
    • 自定义函数的进阶应用
      • 复杂函数定义
      • 函数的重用
    • 结语

bc命令文档

英文

root@ky:~# bc --help
usage: bc [options] [file ...]
  -h  --help         print this usage and exit
  -i  --interactive  force interactive mode
  -l  --mathlib      use the predefined math routines
  -q  --quiet        don't print initial banner
  -s  --standard     non-standard bc constructs are errors
  -w  --warn         warn about non-standard bc constructs
  -v  --version      print version information and exit

中文

root@ky:~# bc --help
usage: bc [options] [file ...]
  -h  --help         打印此使用信息并退出
  -i  --interactive  强制进入交互模式
  -l  --mathlib      使用预定义的数学例程
  -q  --quiet        不显示初始标语
  -s  --standard     非标准 bc 构造是错误的
  -w  --warn         警告非标准 bc 构造
  -v  --version      打印版本信息并退出

Linux bc 命令详解

bc(基本计算器)是一种在Unix和类Unix操作系统中广泛使用的任意精度计算语言。它的功能强大,支持浮点数运算、变量赋值和自定义函数等。本文将深入探讨 bc 命令的用法和特性,并提供实用的示例。

bc 命令的基本用法

启动 bc 环境

bc 可以在命令行中直接启动。默认情况下,它不会输出计算过程中的每一步结果,直到收到一个表达式并求值后才显示结果。启动 bc 的最简单方式是在命令行中输入 bc,然后按 Enter 键:

$ bc

在这里插入图片描述

进行基本计算

bc 环境中,可以执行基本的数学运算,如加、减、乘、除等。例如:

1 + 1
2 * 3
4 / 2
5 - 3

在这里插入图片描述

退出 bc

要退出 bc,可以使用 quit 命令或者组合键 Ctrl+D

quit

在这里插入图片描述

bc 中的数学功能

执行高级数学计算

bc 支持多种数学函数,包括但不限于平方根、指数、对数等。为了使用这些功能,需要在启动 bc 时加入 -l 选项,这将载入数学库。

$ bc -l

在这里插入图片描述

平方根和指数函数

计算数字的平方根可以使用 sqrt() 函数,计算指数可以使用 ^ 运算符:

sqrt(9)
2^3

在这里插入图片描述

对数函数

计算自然对数和常用对数:

l(2)    # 自然对数
l(100)/l(10)  # 常用对数,即 log10(100)

在这里插入图片描述

处理精度问题

bc 默认的小数精度较低(看着也不低啊?):

在这里插入图片描述

可以通过设置 scale 变量来调整精度。例如,计算圆周率π的值(保留十位小数):

scale=10
4*a(1)

a(x) 是反正切函数,利用数学公式

在这里插入图片描述
在这里插入图片描述

来计算。

变量和数组

变量赋值和使用

bc 中,变量可以存储计算结果,便于后续操作。赋值操作使用 = 运算符:

x = 5
y = 3 * x + 2

在这里插入图片描述

数组的使用

bc 也支持一维数组,用于存储一系列值:

arr[0] = 5
arr[1] = arr[0] * 2

在这里插入图片描述

创建和使用自定义函数

bc 允许用户定义函数,这为复杂计算提供了便利。定义函数的语法如下:

define f(x) {
    return (x * x + 2);
}

调用自定义函数:

f(4)

在这里插入图片描述

这部分讨论了 bc 的基本使用方法、数学功能、变量与数组的操作,以及如何创建和使用自定义函数。在下一部分中,将继续探讨如何在脚本中使用 bc 来进行批量计算和其他高级功能。

bc 命令的高级用法

在脚本中使用 bc

bc 可以被嵌入到 shell 脚本中,以执行复杂的计算任务。这是自动化计算任务的一个有效方法。

基本脚本集成

可以通过将表达式传递给 bc 来从 bash 脚本中调用 bc。例如,下面的脚本用于计算两个变量的乘积:

#!/bin/bash
a=5
b=6
result=$(echo "$a * $b" | bc)
echo "The result is $result"

在这里插入图片描述

使用循环和条件语句

bc 也支持循环和条件语句,这可以在更复杂的脚本中使用。例如,一个计算阶乘的 bc 脚本:

#!/bin/bash
n=5
factorial=1

for ((i = 1; i <= n; i++)); do
    factorial=$(echo "$factorial * $i" | bc)
    echo "The temp factorial is $factorial"
done

echo "The factorial of $n is $factorial"

在这里插入图片描述

bc 中的高级数学和逻辑运算

使用逻辑运算符

bc 支持逻辑运算符,这使得在执行数学计算时可以包括条件测试。逻辑运算符包括 <><=>===!=

#!/bin/bash
x=5
# x=15
y=10
check=$(echo "$x < $y" | bc)
echo "check is $check"
if [ "$check" -eq 1 ]; then
    echo "$x is less than $y"
else
    echo "$x is not less than $y"
fi

在这里插入图片描述

三元运算符的使用(不支持原生语法,但是可模拟)

bc支持 C 风格的三元运算符 ?:,可以在单行内进行条件判断和赋值:

result=$(echo "a = 5; b = 3; a > b ? a : b" | bc)
echo "The larger number is $result"

报错了:

在这里插入图片描述

可改成:

#!/bin/bash

result=$(echo "a = 5; b = 3; if (a > b) a else b" | bc)
echo "The larger number is $result"

在这里插入图片描述

解释:

bc 中使用三元运算符时确实需要特别的格式,由于 bc 对于标准的三元运算符支持不同于一些其他编程环境。要在 bc 中正确使用三元运算符,必须确保 bc 在处理表达式时已经启用了扩展语法。这通常可以通过使用 -l 选项来启动 bc 来确保启用。

修改后的脚本如下:

#!/bin/bash

result=$(echo "a = 5; b = 3; if (a > b) a else b" | bc) echo "The
larger number is $result" 

在这个修改后的版本中,我使用了 if-else 语句替代了三元运算符,因为 bc 的标准版本中没有内建支持类似于 C 语言风格的三元运算符。使用 if-else 语句是在 bc 中进行条件判断的一种有效方式。

自定义函数的进阶应用

复杂函数定义

bc 中可以定义更复杂的函数,例如实现递归计算。以下是一个计算斐波那契数列的函数:

define fib(n) {
    if (n <= 2) return 1;
    return (fib(n-1) + fib(n-2));
}

在这里插入图片描述

函数的重用

定义好的函数可以在多个计算中重复使用,提高代码的复用性和清晰度。例如,定义一个计算组合数的函数,然后用于求解不同的组合问题:

define comb(n, k) {
    if (k == 0 || k == n) return 1;
    return (comb(n-1, k-1) + comb(n-1, k));
}

定义的 comb(n, k) 函数计算的是从 n 个元素中选择 k 个元素的组合数,也被称为二项式系数。在数学上,这个值通常表示为 “C(n, k)” 或
在这里插入图片描述
,并且可以用以下的数学公式计算:

在这里插入图片描述

这个函数使用了递归的方法来计算组合数。递归的基本案例是当 k == 0k == n 时,组合数是 1,因为从 n 个元素中选择 0 个或所有 n 个元素的方式只有一种。对于其他情况,组合数是从前 n-1 个元素中选择 k-1 个元素的组合数加上从前 n-1 个元素中选择 k 个元素的组合数。这是基于组合数的递归性质:每个元素都有两种可能,要么被选中,要么不被选中。

如果想在 bc 中使用这个函数来计算具体的组合数,可以按照之前提供的方法将函数定义和调用放入 Bash 脚本,并通过 bc 执行。这里是一个如何使用这个函数的示例:

#!/bin/bash

# 定义和调用组合数函数
calculate_comb() {
    bc <<EOF
define comb(n, k) {
    if (k == 0 || k == n) return 1;
    return comb(n-1, k-1) + comb(n-1, k);
}
comb($1, $2)
EOF
}

# 调用函数计算组合数 C(5, 2)
result=$(calculate_comb 5 2)
echo "C(5, 2) is $result"

在这里插入图片描述·

这个脚本将计算从 5 个元素中选择 2 个元素的组合数,并输出结果。

关于here document重定向,可参考文章:Shell脚本 <<EOF … EOF语法(Here Document)(特殊的输入重定向方式)(定界符)

结语

通过深入探讨 bc 命令的基础与高级用法,可以看出其在处理数学和逻辑运算中的强大能力。无论是在交互式环境中快速计算,还是作为脚本的一部分自动化复杂计算任务,bc 都是一个非常有用的工具。通过本文的介绍,希望能帮助读者更好地理解和运用这个功能强大的命令行计算器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1678833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我与C++的爱恋:string类的常见接口函数

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 朋友们大家好啊&#xff0c;本节我们来到STL内容的第一部分&#xff1a;string类接口函数的介绍 ​ ​ 1.string类的认识 给大家分享一个c文档 https://legacy.cplusplus.…

Java | 增强for底层工作机制

✍&#x1f3fc;作者&#xff1a;周棋洛&#xff0c;bilidown开发者。 ♉星座&#xff1a;金牛座 &#x1f3e0;主页&#xff1a;我的个人网站 &#x1f310;关键&#xff1a;Java 增强for 工作机制 目录 引言增强for循环语法增强for工作机制探究简单总结1.对于实现了Iterable接…

LeetCode算法题:11. 盛最多水的容器(Java)(双指针问题总结)

给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 提示&#xff1a; n height.length2 <…

寻求发展+兼顾陪读|企业高管赴美国乔治梅森大学做访问学者

E经理拟去美国访学&#xff0c;想达到3个目的&#xff1a;结合本专业方向&#xff0c;扩展至跨学科研究领域&#xff1b;考察市场&#xff0c;寻求新的发展契机&#xff1b;携孩子出国读书&#xff0c;兼顾陪读&#xff0c;并希望尽早出国。最终我们为其落实的乔治梅森大学访问…

AI预测体彩排3采取878定位大底=23策略+杀断组+杀组选+杀和尾+杀和值012缩水测试5月15日预测第1弹

昨天与一位玩排3的彩友通过视频直播的形式聊了下&#xff0c;受益匪浅&#xff0c;给我提供了一些比较有价值的建议&#xff0c;比如&#xff0c;对于878的定位策略&#xff0c;方向是没问题的&#xff0c;但是8783的话&#xff0c;还是缺乏一定的命中率&#xff0c;如果87823&…

做私域,该如何从公域向私域引流?

说到私域运营&#xff0c;很多人首先就会想到&#xff1a;私域流量。企业做私域&#xff0c;流量从哪来&#xff1f;该怎样去引流&#xff1f;又该如何保障私域流量的质量等一系列问题&#xff0c;都需要企业一一解决。所以&#xff0c;今天&#xff0c;我们就来探讨一下&#…

transformer通俗理解

transformer中最麻烦的encoder模块其实张量和矩阵的变化维度比较复杂。我感觉这篇文章讲的特别详细Q、K、V 与 Multi-Head Attention 多头注意力机制 - 知乎 我总结一下文章几个很重要的点吧&#xff01;算是我学的一点收获 1.什么是QKV&#xff1f; 2.怎么理解多头&#xff…

端口号查询进程PID

情况1&#xff1a;由于 idea 突然闪退&#xff0c;导致正在 debug 的 Java 进程没结束掉&#xff0c;端口还在占用&#xff0c;重新 debug 不了&#xff0c;所以需要到任务管理器把进程结束掉 但问题是如果当任务管理器进程同时有多个 Java 进程在运行&#xff08;而且名字一样…

万物皆可监控(shell脚本监控TIDB-DM和DSG同步状态)

监控的方式有很多&#xff0c;常用的有zabbix和prometheus平台&#xff0c;理论上都可以做到对有状态服务的监控&#xff0c;因为我个人对这两个监控平台不是很熟悉&#xff0c;所以一般喜欢使用shell脚本来做监控&#xff1b; 纯oracle 数据库的监控推荐使用EMCC&#xff0c;…

基于火山引擎云搜索的混合搜索实战

在搜索应用中&#xff0c;传统的 Keyword Search 一直是主要的搜索方法&#xff0c;它适合精确匹配查询的场景&#xff0c;能够提供低延迟和良好的结果可解释性&#xff0c;但是 Keyword Search 并没有考虑上下文信息&#xff0c;可能产生不相关的结果。最近几年&#xff0c;基…

淘系淘宝订单详情api接口(订单详情,订单列表,出售中,库存等属性)

淘系淘宝订单详情api接口&#xff08;订单详情&#xff0c;订单列表&#xff0c;出售中&#xff0c;库存等属性&#xff09;

免费泛域名证书申请

通配符证书是一种 SSL/TLS 证书&#xff0c;可用于保护多个域&#xff08;主机&#xff09;&#xff0c;由域名字段中的通配符 (*) 指示。 如果您有很多需要保护的域或子域&#xff0c;这会很有帮助&#xff0c;因为它可以节省您的时间和金钱。 本文将讨论通配符证书、它们的工…

【Win】如何在Windows隐藏安装的程序

由于维护人员或用户可能无意中通过“程序和功能”选项删除对业务至关重要的软件&#xff0c;这导致服务中断或安全风险。为了防止此类情况发生&#xff0c;确保只有授权的用户才能访问和管理系统中的程序。为了实现这一目标&#xff0c;我们将探讨如何在Windows操作系统中隐藏特…

使用高防IP是应对网络安全的重要措施

使用高防IP&#xff08;High Defense IP&#xff09;在现代网络环境中显得尤为重要&#xff0c;这主要源于以下几个方面的原因&#xff1a; 一、网络安全形势严峻 随着互联网的快速发展&#xff0c;网络安全问题日益突出。各种网络攻击手段层出不穷&#xff0c;如分布式拒绝服…

R语言基础--文件读写

From生物技能树&#xff08;R第五节&#xff09; 文章目录 一、文件读写1.注意用project管理工作目录2、文件读取1、读取.txt文件2、读取.csv文件注意&#xff1a;数据框不允许重复的行名 3.数据框的导出4.读取文件的其他方式(用于读取/导出文件的R包)--经验1.base2.readr3.dat…

【会议征稿】2024年机器人前沿技术与创新国际会议(FTIR 2024, 7/19-21)

2024年机器人前沿技术与创新国际会议&#xff08;FTIR 2024&#xff09;将于2024年7月19-21日在中国杭州举行。FTIR 2024聚焦前沿技术与创新&#xff0c;将把机器人领域的创新学者和专家聚集到一个共同的论坛。会议的主要目标是促进机器人的研究和开发活动&#xff0c;另一个目…

使用单目相机前后帧特征点匹配进行3D深度估计的方法

在计算机视觉和机器人领域&#xff0c;三维空间感知是实现环境理解和交互的核心技术之一。特别是在资源受限的场合&#xff0c;使用针孔模型的单目相机进行深度估计成为了一种既经济又实用的解决方案。单目深度估计技术依赖于从连续视频帧中提取和匹配特征点&#xff0c;以估计…

企业大模型如何成为自己数据的“百科全书”?

作者 | 郭炜 编辑 | Debra Chen 在当今的商业环境中&#xff0c;大数据的管理和应用已经成为企业决策和运营的核心组成部分。然而&#xff0c;随着数据量的爆炸性增长&#xff0c;如何有效利用这些数据成为了一个普遍的挑战。 本文将探讨大数据架构、大模型的集成&#xff0…

线上网页点击菜单没有反应 报错ChunkLoadError:Loading chunk chunk-***** failed

现象 点击菜单无反应并且控制台报错Loading chunk chunk-***** failed 具体错误现象截图如下 分析 在线上页面已经打开的情况下&#xff0c;重新打包部署了前端项目。每次打包&#xff0c;js文件的hash值都会发生改变&#xff0c;因为我们的路由采用了懒加载&#xff0c;未…

吴恩达深度学习笔记:优化算法 (Optimization algorithms)2.7

目录 第二门课: 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第二周&#xff1a;优化算法 (Optimization algorithms)2.7 RMSprop 第二门课: 改善深层神经网络&am…