1 个不稳定版本
0.1.0 | 2021年5月31日 |
---|
1425 在 数学
53KB
1K SLoC
doctor-syn
理由
rust 的计算机代数系统。
这个crate主要用于在编译时生成数学代码。重点主要在于数值逼近超越函数和统计函数,以便使它们可向量化。
例如,如果我们想对 -cos(x*2π)
在 -0.5..0.5
的定义域上进行近似,我们可以使用approx函数来转换表达式。
fn gen_cos() -> proc_macro2::TokenStream {
let xmin = -0.5;
let xmax = 0.5;
let approx = expr!((x * 3.1415926535897932384626433 * 2.0).cos() * -1.0)
.approx(13, xmin, xmax, name!(x), Parity::Even)
.unwrap()
.use_suffix(Some("f32".to_string()))
.unwrap()
.into_inner();
quote!(
fn cos(x: f32) -> f32 {
let x = x * (1.0 / (std::f32::consts::PI * 2.0));
let x = x - x.floor() - 0.5;
#approx
}
)
}
项目名称的来源
Doctor Syn 是 Russell Thorndike 的小说中同名的主人公,也是对用于实现它的 syn rust 库的戏称。
https://en.wikipedia.org/wiki/Doctor_Syn
Doctor Syn 既是 Dymchurch 教区的一个牧师,也是一个走私犯。
libmgen
你可以使用以下命令安装 libmgen
二进制文件:
cargo install --path . --bin libmgen
然后可以运行 libmgen
以生成具有不同精度、语言和数据类型的 libm。
依赖项
~1.5MB
~38K SLoC