打开主菜单

定点数(英語:fixed-point number)是一种实数数据类型,要求小数点后位数固定,有时也要求小数点前位数固定。定点数与更复杂的浮点数相对。

如果程序需要在没有FPU处理器上执行,或者可以通过定点数提高效率和计算精度时,常使用定点数表示基数为2或10的分数

实现编辑

定点数类型的值其实就是个整数,需要额外做比例进位,进多少位需要根据具体的定点数类型决定。例如 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:fPS2 中所使用的表示法,包含符号位信息。[4]0:8:0 表示 8 位无符号整数。

另见编辑

参考文献编辑

  1. ^ 1.0 1.1 Texas Instruments, TMS320C64x DSP Library Programmer's Reference, Appendix A.2
  2. ^ MathWorks Fixed-Point Toolbox Documentation Glossary. mathworks.com. 
  3. ^ Inc., solidThinking,. VisSim is now solidThinking Embed. www.vissim.com. 
  4. ^ PS2 GS User's Guide, Chapter 7.1 "Explanatory Notes"