Linux bc命令(bc指令)(基本計算器)(任意精度計算語言:支持浮點數運算、變量賦值和自定義函數等)

文章目錄

  • 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=1for ((i = 1; i <= n; i++)); dofactorial=$(echo "$factorial * $i" | bc)echo "The temp factorial is $factorial"
doneecho "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 ]; thenecho "$x is less than $y"
elseecho "$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/bashresult=$(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/bashresult=$(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.pswp.cn/diannao/13186.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13186.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13186.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Google I/O 大會 | 精彩看點一覽

作者 / 開發者關系和開源總監 Timothy Jordan 2024 年 Google I/O 大會于北京時間 5 月 15 日 1:00am 在加利福尼亞的山景城以 Google 主題演講直播拉開序幕。隨后&#xff0c;在北京時間 4:30am 舉行開發者主題演講。大家可前往回看 "Google 主題演講" 以及 "開…

AIGC時代已至,你準備好抓住機遇了嗎?

一、行業前景 AIGC&#xff0c;即人工智能生成內容&#xff0c;是近年來人工智能領域中發展迅猛的一個分支。隨著大數據、云計算、機器學習等技術的不斷進步&#xff0c;AIGC已經取得了顯著的成果&#xff0c;并且在廣告、游戲、自媒體、教育、電商等多個領域實現了廣泛應用。…

AI寫算法:支持向量機(SVM)

在Python中&#xff0c;我們可以使用scikit-learn庫來實現支持向量機&#xff08;SVM&#xff09;。以下是一個簡單的示例&#xff0c;演示如何使用scikit-learn的SVC類來訓練一個SVM分類器&#xff0c;并使用它對一些數據進行預測。 python復制代碼 # 導入必要的庫 from skle…

圖像中的attention及QKV機制解釋

簡單記錄/推薦兩篇博客&#xff0c;后續細化寫一下&#xff1a; 圖像中的各類 attention https://blog.csdn.net/weixin_44505185/article/details/127013204 Cross-attention的直觀理解 首先理解&#xff0c;cross-attention 是兩個不同向量間的相關計算&#xff0c;一般Q…

DolphinScheduler(海豚調度)- docker部署實戰

1.官方文檔 https://dolphinscheduler.apache.org/zh-cn/docs/3.2.1/guide/start/docker 2.docker環境安裝 版本情況&#xff08;這個地方踩了不少坑&#xff09;&#xff1a;docker-26.1.2&#xff0c;docker-compose-v2.11.0。 具體可使用我上傳的安裝包&#xff0c;一鍵安…

leetcode題目55

跳躍游戲 中等 給你一個非負整數數組 nums &#xff0c;你最初位于數組的 第一個下標 。數組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最后一個下標&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 示例 1…

MT3037 新月軒就餐

思路&#xff1a; 此題每道菜的價錢相同&#xff0c;想最小化付的錢即求最小區間長度可以滿足“品嘗到所有名廚手藝”。 使用雙端隊列存儲元素&#xff0c;隊尾不斷向后遍歷&#xff1a;頭->尾 如果隊頭隊尾&#xff0c;則隊頭往右移一格&#xff0c;直到區間不同元素數m…

Docker部署MaxKB詳細步驟(window系統)

上面章節已經實現了ollama李現部署llama3&#xff0c;并實現了一些簡單的問答&#xff0c;但是問答的界面是在命令提示符中&#xff0c;交互很不友好&#xff0c;也不方便局域網其他用戶訪問&#xff0c;所以這節用docker部署MaxKB實現網頁訪問llama3&#xff0c;首先電腦上需要…

分布式系統的一致性與共識算法(四)

Etcd與Raft算法 Raft保證讀請求Linearizability的方法: 1.Leader把每次讀請求作為一條日志記錄&#xff0c;以日志復制的形式提交&#xff0c;并應用到狀態機后&#xff0c;讀取狀態機中的數據返回(一次RTT、一次磁盤寫)2.使用Leader Lease&#xff0c;保證整個集群只有一個L…

使用Flask-RESTful構建RESTful API

文章目錄 安裝Flask-RESTful導入模塊和類創建一個資源類運行應用測試API總結 Flask是一個輕量級的Python web開發框架&#xff0c;而Flask-RESTful是一個基于Flask的擴展&#xff0c;專門用于構建RESTful API。它提供了一些幫助類和方法&#xff0c;使構建API變得更加簡單和高效…

詳細分析Vue3中的reactive(附Demo)

目錄 1. 基本知識2. 用法3. Demo 1. 基本知識 reactive 是一個函數&#xff0c;用于將一個普通的 JavaScript 對象轉換為響應式對象 當對象的屬性發生變化時&#xff0c;Vue 會自動追蹤這些變化&#xff0c;并觸發相應的更新 Vue2沒有&#xff0c;而Vue3中有&#xff0c;為啥…

公司郵箱是什么?公司郵箱和個人郵箱有什么不同?

公司郵箱是企業用來收發郵件的專業版電子郵箱&#xff0c;不同于個人郵箱的簡單功能和有限的存儲空間&#xff0c;公司郵箱的功能更加豐富&#xff0c;能夠滿足企業的日常辦公和協作需求。本文將為您詳細講解公司郵箱和個人郵箱的區別&#xff0c;以供您選擇更適合自己的郵箱類…

嵌入式——C51版本Keil環境搭建

&#x1f3ac; 秋野醬&#xff1a;《個人主頁》 &#x1f525; 個人專欄:《Java專欄》《Python專欄》 ??心若有所向往,何懼道阻且長 文章目錄 目標搭建流程下載與安裝激活STC環境添加校驗是否導入STC環境 目標 ● 了解C51版本Keil開發環境的概念和用途 ● 掌握C51版本Keil環…

2024年NOC大賽創客智慧(西瓜創客)Python復賽編程真題模擬試卷包含答案

NOC復賽python模擬題 1.編寫一個程序&#xff0c;提示用戶輸人一個矩形的長度和寬度&#xff0c;并輸出其面積, 2.試計算在區間 1 到 n的所有整數中,數字x(0≤x≤9)共出現了多少次?例如在 1到11 中&#xff0c;即在 1,2,3.45,6.7,8.9,10,11 中&#xff0c;數字 1出現了 4 次.…

鴻蒙生態融合進行時!菊風啟動適配HarmonyOS NEXT,賦能原生應用實時

??今日話題 鴻蒙HarmonyOS NEXT 自華為公開宣布鴻蒙 HarmonyOS NEXT 系統以來&#xff0c;該系統受到了業內廣泛關注&#xff0c;和以往鴻蒙系統不同的是該系統底座完全由華為自研&#xff0c;摒棄了 Linux 內核和安卓 AOSP 代碼&#xff0c;僅兼容鴻蒙內核及鴻蒙系統的應用…

Leetcode---1.兩數之和 (詳解加哈希表解釋和使用)

文章目錄 題目 [兩數之和](https://leetcode.cn/problems/two-sum/)方法一&#xff1a;暴力枚舉代碼方法二&#xff1a;哈希表代碼 哈希表哈希表的基本概念哈希函數&#xff08;Hash Function&#xff09;&#xff1a;沖突&#xff08;Collision&#xff09;&#xff1a;鏈地址…

windows驅動開發-PCI討論(一)

前面描述中斷的時候&#xff0c;我們曾經多次體積PCI&#xff0c;甚至提供了一些PCI的相關知識&#xff0c;但是整個PCI是一個很大的體系&#xff0c;專門記錄這個體系超出了這個系列的范疇&#xff0c;有興趣的可以到PCI官網了解詳細的情況。 但是還是會花費一些時間討論PCI技…

Pytorch入門實戰 P10-使用pytorch實現車牌識別

目錄 前言 一、MyDataset文件 二、完整代碼&#xff1a; 三、結果展示&#xff1a; 四、添加accuracy值 &#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 | 接輔導、項目定制 本周的學習內容是&#xff0…

SEO:搜索引擎蜘蛛名稱UA(user-agent)

最近網站在做統計功能&#xff0c;想著統計下蜘蛛爬行記錄&#xff0c;看看都有哪些搜索引擎蜘蛛經常關顧&#xff0c;故而好進行相應的對策改變。都知道搜索引擎對一個網站很重要,是很多網站重要的流量來源。熟悉各大搜索引擎的蜘蛛就顯得必要。 做SEO優化的通常會說蜘蛛爬得越…

國網698.45報文解析工具

本文分享一個698.45協議的報文解析工具&#xff0c;此報文解析工具功能強大&#xff0c;可以解析多種國網數據協議。 下載鏈接: https://pan.baidu.com/s/1ngbBG-yL8ucRWLDflqzEnQ 提取碼: y1de 主要界面如下&#xff1a; 本工具內置698.45數據協議&#xff0c; 即可調用word…