#const #sin #trig #cos #trigonometry #version

nightly no-std const-trig

Rust包提供const三角函数

3个版本

0.0.2 2022年12月24日
0.0.1 2022年3月10日
0.0.0 2022年2月2日

#575 in 数学

每月 39 次下载
用于 qukit

GPL-3.0 许可证

16KB
310

Const-trig

这个包存在是为了提供诸如 const 的函数版本,如 cossin 等。

请注意,此包需要nightly Rust来统一函数的行为。

当所有这些函数都成为std中的const时,不再需要此包。

例如,从std中的 cossin 函数可以访问为 const_trig::cos

并非所有三角函数都有,但如果你想要添加它们,可以打开一个 GitHub问题(总有一天我会看到的) :) 使用方法

use const_trig::{ToDegrees, ToRadians};

macro_rules! cmp {
   ($fn:ident, $e:expr) => {
       println!(concat!("const_trig::", stringify!($fn), " = {}"), const_trig::$fn($e, None));
       println!(concat!("std ", stringify!($fn), " = {}\n"), $e.$fn());
   };

   ($fn:ident, $lib:expr, $std:expr) => {
       println!(concat!("const_trig::", stringify!($fn), " = {}"), const_trig::$fn($lib, None));
       println!(concat!("std ", stringify!($fn), " = {}\n"), $std.$fn());
   };

   (! $fn:ident, $e:expr, $fnstd:ident) => {
       println!(concat!("const_trig::", stringify!($fn), " = {}"), const_trig::$fn($e, None));
       println!(concat!("std ", stringify!($fnstd), " = {}\n"), $e.$fnstd());
   };
}

fn main() {
   let sixty_degrees = 60.0f32.degrees().radians().get();
   cmp!(sin, sixty_degrees.radians(), sixty_degrees);
   cmp!(cos, sixty_degrees.radians(), sixty_degrees);

   cmp!(sqrt, 4.0f64);
   cmp!(sqrt, 2.0f64);

   cmp!(ln, 10.0f64);
   cmp!(ln, core::f64::consts::E);

   cmp!(! lg, core::f64::consts::E, log10);

   cmp!(! lb, 10.0f64, log2);

   println!("const_trig::log = {}", const_trig::log(3.5, 10.0f64, None));
   println!("std log = {}", 3.5f64.log(10.0));

   println!("{}", const_trig::root(34.0, 5, None))
}

无运行时依赖