定点数
实现
定点数类型的值其实就是个整数,需要额外做比例进位,进多少位需要根据具体的定点数类型决定。例如 1.23 使用 1/1000 比例的定点数表示时是 1230;1,230,000 使用 1000 比例的定点数表示也是 1230。与浮点数不同,相同类型的定点数中所有值的缩放系数都是一致的,在计算过程中也保持不变。
缩放系数通常是 10 或 2 的幂,前者方便人类读写,后者易于高效计算。不过有时也会使用其它比例,例如可以用 1/3600 的比例的定点数来表示以小时为单位的时间值,可以精确到秒。
定点数的最大值,可以通过将其内部所使用的整数的最大值乘以缩放系数求得,最小值同理。
二进制与十进制
常见的定点数类型分二进制和十进制两种。十进制定点数的缩放系数是10的幂,二进制定点数的缩放系数是2的幂。
最常用的定点数是二进制的,因为按照缩放系数还原的操作可以用快速的移位操作实现。
表示法
表示字长和二进制定点数中小数点位置的方法有很多种。下面的例子中,使用 f 表示小数部分位数、m 表示整数部分位数、s 表示符号位位数、b 表示总位数,其中「位数」均为比特位。
- Qf:称作「Q 格式」,Q15 表示 15 个小数位。这样的记法存在歧义,因为没有包含字长,但实际使用时一般可以根据目标处理器平台判断字长为 16 或者 32 位。[1]
- Qm.f:无歧义的 Q 格式,因为整个字是补码整数,所以符号位长度可以根据其它信息推导而来。例如 Q1.30 表示该数有 1 个整数位、30 个小数位,是 32 位补码整数。[1][2]
- fxm.b:「fx 格式」与上述 Q 格式类似,区别在于点号后是字长。例如 fx1.16 表示有 1 个整数位、15 个小数位的 16 位字。[3]
- s:m:f:PS2 中所使用的表示法,包含符号位信息。[4]0:8:0 表示 8 位无符号整数。
参考文献
- Texas Instruments, TMS320C64x DSP Library Programmer's Reference 页面存档备份,存于, Appendix A.2
- . mathworks.com. [2019-03-06]. (原始内容存档于2011-03-16).
- Inc., solidThinking,. . www.vissim.com. [2019-03-06]. (原始内容存档于2016-12-02).
- PS2 GS User's Guide, Chapter 7.1 "Explanatory Notes"
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.