6个版本
0.2.5 | 2022年5月21日 |
---|---|
0.2.4 | 2020年8月2日 |
0.2.1 | 2020年6月8日 |
0.2.0 | 2020年2月4日 |
#7 in #unsigned
440 每月下载次数
用于 7 个crate (3 直接)
30KB
541 代码行
fixed-sqrt
使用整数平方根算法为定点数实现的平方根函数。
该crate将fixed
crate中定义的定点数类型实现的sqrt()
作为特质方法,使用由integer-sqrt
crate提供的整数平方根算法。
实现
偶数分数位
FixedSqrt
为所有具有偶数位的无符号定点数类型实现。
FixedSqrt
也为所有具有偶数分数位的带符号定点数类型实现,除了具有零整数位的情况(即分数位等于类型的总位数)。这是因为这些类型的范围是[-0.5, 0.5),而该范围内[0.25, 0.5)的数的平方根将>= 0.5,超出了该类型可表示的值域。
奇数分数位
使用奇数分数位计算平方根需要在计算平方根之前额外移动一位。
对于有符号定点数,由于平方根仅对正输入值定义,所有有符号定点数(包括FixedI128
)都可以通过使用符号位进行溢出利用来原地计算平方根。
对于具有奇数分数位的无符号定点数,如果需要额外一位(即最高位为1),则在计算平方根之前需要将其转换为下一个更大的无符号原始类型。因此,由于需要256位无符号整数,或者必须将域限制在u128值的下半部分,因此没有为具有奇数分数位的FixedU128
类型实现平方根特质。
精度
运行errors
示例可以查看8位和16位定点数的详细错误统计。结果表明,在最坏情况下,绝对误差发生在最大值处,百分比误差很小,而最坏情况的百分比误差发生在最小值处,绝对误差很小。
可以通过运行带有-p
标志的errors
示例生成适合使用gnuplot绘图的CSV文件。
一般来说,平方根将在1.0附近(通常不超过)f64
的平方根,除非在处理大的128位数字时,固定点数的精度优于f64
,在这种情况下,浮点误差可能大于1.0。
恐慌
- 如果对负数进行调用,则会产生恐慌
依赖项
~2.5MB
~47K SLoC