10 个版本
0.5.3 | 2024年6月18日 |
---|---|
0.5.2 | 2023年11月15日 |
0.5.1 | 2023年8月30日 |
0.2.2 | 2023年7月15日 |
0.1.0 | 2021年6月25日 |
#61 in 数学
9,316 每月下载量
用于 6 个 Crates(2 个直接使用)
96KB
2.5K SLoC
crate scientific
任意精度科学数字
常量
使用 Scientific!
创建常量数字。
use scientific::Scientific;
let n1 = Scientific!(1e100);
let n2 = Scientific!(1e80);
assert_eq!(&n1 + &n2, Scientific!(1.00000000000000000001e100));
// An f64 has only a precision of about 15.9 digits, this are already 21.
调用
所有函数都期望一个 Scientific
数字的引用。(见上面示例。)
转换
存在 From
和 TryFrom
特性,用于在 Scientific
和整数、浮点数和字符串之间进行转换。
将具有小数的科学数字转换为整数将失败。
存在一个 FromStr
实例(它克隆了 str
并调用 Scientific::from_string
)。
函数 Scientific::to_bytes
和 Scientific::from_bytes
使用压缩表示而不是 ASCII(当使用 serde 与非人类可读格式时,也将使用此格式)。
精度
大多数函数在真正的任意精度下工作,请注意这一点。
例如:将 1e1000 和 1e-1000 相加,这两个数都只有 1 个字节的尾数,结果将会有 2001 个字节的尾数。
除法和平方根(依赖于除法)以及所有舍入函数都需要指定精度,结果将只计算到该精度。
可以指定为 Decimals
或 Digits
。当使用小数时,指定计算的小数位数(例如,对于 0.01
的最小数值,使用 2
,对于 1
使用 0
,对于 100
使用 -2
)。当使用数字时,指定尾数的位数(使用 <= 0 位数字将始终为零)。
快捷键:Precision::INTEGER
用于整数计算(即 Decimals(0)
)和 Precision::F64
用于具有更好精度的 f64 计算作为(即 Digits(16)
)。
位移
位移运算符通过一位(而不是您可能期望的一位)进行位移。
舍入
函数 round
/round_assign
支持多种舍入选项。请参阅 Rounding
。
上述函数应仅用于最终舍入。如果需要中间舍入(例如,以保持尾数易于管理)请使用 round_rpsp
/round_assign
,至少与最终精度相同。舍入将创建比您所需多一位的数字,以便轻松使用。RPSP 代表为较短精度舍入,请参阅 维基百科 获取更多信息。
在任何情况下,都建议使用 *_assign
版本,因为它可以节省尾数的重新分配(尽管不是每次都需要或可以避免)。
示例
let precision = Precision::Digits(30); // precision for intermediate roundings and the final one
// do calculations
value.round_rpsp_assign(precision); // round to 31 digits with 'Rounding to prepare for shorter precision'
// do more calculations
value.round_assign(precision, RoundHalfUp); // round to 30 digits with the method 'RoundHalfUp'
截断
函数 truncate
/truncate_assign
与使用 RoundTowardsZero
的舍入相同,但更快。
此外,truncate_assign
也比 truncate
快,因为它不需要复制。无论如何,它都不需要移动尾数(因为尾数没有改变,只是可能引用了它的前缀)。
特性
-
serde
:启用 serde 的 De-/序列化。 -
macro
:重新导出Scientific!
宏,默认启用。 -
std
:如果启用,库需要std
并且为所有错误类型实现了Error
特性。如果没有它,库将是no_std
。 -
arc
:使用Arc
而不是Rc
,这可以为Scientific
提供发送和同步特性。尽管Arc
更昂贵,但由于它仅在创建/克隆/销毁Scientific
数字时使用,因此可能并不那么昂贵。 -
debug
:启用多个检查。在开发此库时非常有帮助。
指数
指数表示为 isize
。预期它永远不会溢出或下溢,即使在添加或减去较小的数字时,例如尾数的长度。
这不会被检查!
依赖关系
~165KB