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
指令的路徑的話,可以將路徑再插入至巨集的第一個參數。