#fixed-point #overflow #i128 #u64 #no-std #perform

no-std dummy-library-

dummy-library

1 个不稳定版本

0.0.2 2023年10月16日

#628 in WebAssembly

MIT 许可证

18KB
353

fixed-point-math

这是一个轻量级的固定点数学库,专为 Rust 编写。特别适用于在 Soroban 和其他基于 WASM 的区块链环境中使用。

安全性

这是一个**实验性软件**,按照“现状”和“可用性”提供。

我们不提供任何保证,并且不会对任何通过使用此代码库产生的损失负责。

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
fixed-point-math = "<desired version>"

示例

固定点数学支持目前添加到 i128u64 类型。对于任何支持的数字,您可以执行如下固定点操作

use fixed_point_math::{STROOP, FixedPoint};

let x: u64 = 1_5000000;
let y: u64 = 2_0000000;
assert_eq!(x.fixed_mul_floor(y, STROOP).unwrap(), 3_0000000);

溢出

溢出结果的处理方式与 Rust 内置的“checked”数学相同,通过返回 None

固定点数学还处理幽灵溢出,其中中间计算溢出,但预期结果会在范围内。此库针对每个支持的类型以不同的方式管理这种情况

  • i128
    • 没有进行额外的处理。 i128 足够大,可以支持大多数带有 7/9 位小数的计算。然而,18 位小数的数学可能会遇到溢出。
  • u64
    • 中间计算被缩放到 u128,然后再次尝试。

致谢

此库受到了许多来源的启发或直接修改,主要是

WASM

支持 WASM 目标 wasm32-unknown-unknown

贡献

欢迎贡献。请查看贡献指南(待定)!

许可证

此库在 MIT 许可证 下发布。

无运行时依赖