#computer #algebra #system #expression #numerical #approx

bin+lib doctor-syn

Rust 表达式的计算机代数系统

1 个不稳定版本

0.1.0 2021年5月31日

1425数学

MIT 许可证

53KB
1K SLoC

doctor-syn

理由

rust 的计算机代数系统。

这个crate主要用于在编译时生成数学代码。重点主要在于数值逼近超越函数和统计函数,以便使它们可向量化。

例如,如果我们想对 -cos(x*)-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