bc是Unix-like作業系統通常會內建用來進行任意精度計算的指令,可以透過撰寫簡單且類似C語言的數學腳本來計算數學。例如輸入scale=4;9/8,可以得到1.1250的輸出。在Rust程式語言中,也可以利用bc來協助我們計算複雜的數學。



bc

bc是筆者開發的套件,可以讓Rust程式語言去呼叫Unix-like作業系統內建的bc指令,還能夠設定bc指令的執行時間上限。

Crates.io

Cargo.toml

bc = "*"

巨集的使用

bc這個crate下提供了bc!bc_timeout!巨集,後者和前者的差異只在於後者擁有限制bc指令的執行時間的能力。

bc!巨集的用法如下:

#[macro_use] extern crate bc;

let result = bc!("2 + 6");

assert_eq!("8", result.unwrap());

如果要指定bc指令的路徑的話,可以將路徑插入至巨集的第一個參數。

bc_timeout!巨集因為有限制執行時間的能力,所以適合用來直接給使用者自行填入bc的計算腳本。用法如下:

#[macro_use] extern crate bc;

let result = bc_timeout!("99^99");

assert_eq!("369729637649726772657187905628805440595668764281741102430259972423552570455277523421410650010128232727940978889548326540119429996769494359451621570193644014418071060667659301384999779999159200499899", result.unwrap());

預設的執行時間上限為15秒,如果要更改秒數的話,可以將數值插入至巨集的第一個參數。例如要限制為20秒的話,程式如下:

#[macro_use] extern crate bc;

let result = bc_timeout!(20, "99^99");

assert_eq!("369729637649726772657187905628805440595668764281741102430259972423552570455277523421410650010128232727940978889548326540119429996769494359451621570193644014418071060667659301384999779999159200499899", result.unwrap());

如果要指定bc指令的路徑的話,可以將路徑再插入至巨集的第一個參數。