9个不稳定版本 (3个破坏性更改)
0.4.1 | 2023年9月7日 |
---|---|
0.4.0 | 2023年9月1日 |
0.3.0 | 2023年8月30日 |
0.2.2 | 2023年8月8日 |
0.1.1 | 2023年1月17日 |
#167 in 数学
每月63次下载
65KB
1K SLoC
固定数学
此库实现了定点数的解析/三角函数。
实现的功能
sqrt
来自特性Sqrt
Sqrt
没有为小于2个整数位的定点数实现,但有在这些类型上工作的函数:sqrt_i1
等...
sin_cos、
sin、
cos、
tan
来自特性SinCos
SinCos
没有为小于8 (TODO 7) 个整数位的定点数实现,因为这些类型上的表值可能会溢出。- 所有计算都在度数内进行
- 除了有一个非常不精确的
sin_cos_rad
函数外,还有一个sin_cos_rad
函数;请查看源代码 了解原因,欢迎修复它(对我来说这不是优先事项)
- 除了有一个非常不精确的
可选功能
- std:固定库的std特性,目前还没有合适的无std支持...
示例
有一些特性和独立函数,请参阅示例了解如何使用它们。
错误
请查看示例以了解此实现产生的错误程度。
通常 sqrt
的误差约为1-2 Delta。
(Delta =到下一个可表示数字的距离)
sin_cos
可能会产生更大的误差,约为1-2位小数。
基准测试
您可以在 benches
中检查或运行基准测试。
以下是我得出的一些结论
SinCos
2022-09-28
sin_cos的计算时间随定点数的字节大小而变化。
- I10F6: ~ 8ns
- I16F16: ~ 9ns
- I32F32: ~ 18ns
- I32F96: ~ 210ns
备注
- 有许多不同的整位/小数位组合;我没有测试它们
(整位必须大于或等于10(但我可能可以进一步放宽这一点)) - 这些都是度数的计算
- 代码使用本地CPU特性编译
- 除非内存受限,否则请使用FixedI32而不是FixedI16。
- 我在相同的风格下对
cordic
的sin_cos
在FixedI64上进行了基准测试。- 请注意,
cordic
使用弧度,我使用了相同的角度值。 - 因此,它们可以在相同的大小表示下处理更大的角度的正弦和余弦。
- 该crate在相同的角度大小上大约快1.5-2倍。
- 请注意,
2023-07-30
系统信息
-`
.o+` --------
`ooo/ OS: Arch Linux x86_64
`+oooo: Host: X570 AORUS ELITE -CF
`+oooooo: Kernel: 6.4.7-arch1-1
-+oooooo+:
`/:-:++oooo+:
`/++++/+++++++: Shell: fish 3.6.1
`/++++++++++++++: Resolution: 3840x2160
`/+++ooooooooooooo/` DE: Hyprland
./ooosssso++osssssso+`
.oossssso-````/ossssss+`
-osssssso. :ssssssso. Terminal: WezTerm
:osssssss/ osssso+++. CPU: AMD Ryzen 7 5800X (16) @ 3.800GHz
/ossssssss/ +ssssooo/- GPU: AMD ATI Radeon RX 7900 XT/7900 XTX
`/ossssso+/:- -:/+osssso+- Memory: 32014MiB
`+sso+:-` `.-/+oso:
`++:. `-/+/
.` `/
现在性能不同,并且没有使用原生CPU特性。
- I10F6: ~ 430ps
- I16F16: ~ 15ns
- I32F32: ~ 25ns
- I32F96: ~ 255ns
使用原生CPU特性: RUSTFLAGS="-C target-cpu=native" cargo bench
- I10F6: ~ 420ps
- I16F16: ~ 8ns
- I32F32: ~ 22ns
- I32F96: ~ 222ns
备注
- I32F32和I32F96的性能有所下降。
- I10F6的性能大幅提升,因此我们可能考虑在不需要很高精度的场合使用16位定点值。
- cordic基准测试未检查...
许可证
本存储库中的所有代码均根据您的选择,分别受以下许可证的约束:
- MIT许可证(《LICENSE-MIT》或http://opensource.org/licenses/MIT)
- Apache许可证,版本2.0(《LICENSE-APACHE》或https://apache.ac.cn/licenses/LICENSE-2.0》)
任选其一。
贡献
除非您明确表示,否则任何有意提交以包含在您的工作中的贡献(根据Apache-2.0许可证定义),应如上所述双重许可,不附加任何额外条款或条件。
归属
我们使用来自cordic
的代码修改,该代码以BSD-3-Clause许可证发布。
依赖关系
~2.5MB
~45K SLoC