定点数运算

在计算中,定点是一种通过存储小数部分的固定位数来表示小数(非整数)的方法。 例如,美元金额通常只存储两个小数位,代表美分(美元的 1/100)。 更一般地说,该术语可以指将分数值表示为某个固定小单位的整数倍,例如 作为十分钟间隔的整数倍的小数小时数。 定点数表示通常与更复杂且计算要求更高的浮点表示形成对比。

在定点表示中,分数通常用与整数部分相同的基数表示,但使用基数 b 的负幂。 最常见的变体是十进制(基数 10)和二进制(基数 2)。 后者通常也称为二进制缩放。 因此,如果存储了 n 个小数位,则该值将始终是 b−n 的整数倍。 定点表示也可用于省略整数值的低位数字

当显示十进制定点数以供人类阅读时,小数部分通常用基数字符与整数部分分开(英语中通常为 ‘.’,但在许多语言中通常为 ‘,’ 或其他符号) 其他语言)。 然而,在内部,没有分隔,两组数字之间的区别仅由处理此类数字的程序定义。

定点表示是机械计算器的标准。 由于大多数现代处理器都具有快速浮点单元 (FPU),因此定点表示现在仅在特殊情况下使用,例如低成本嵌入式微处理器微控制器; 在需要高速和/或低功耗和/或小芯片面积的应用中,如图像、视频和数字信号处理; 或者当他们的使用更自然地解决问题时。 后者的例子是美元金额的核算,这时必须按照严格规定的方式将小数点四舍五入为整数; 以及通过查表评估函数。

表示

小数的定点表示本质上是一个整数,它要隐式地乘以一个固定的比例因子。 例如,值 1.23 可以作为整数值 1230 存储在变量中,隐式比例因子为 1/1000(意味着最后 3 个小数位被隐式假定为小数),而值 1 230 000 可以 表示为 1230,隐含比例因子为 1000(隐含的小数位数为负 3,即右侧有 3 个隐含的零数字)。 这种表示允许标准整数算术单元执行有理数计算。

负值通常以二进制定点格式表示为二进制补码表示中的带符号整数,并带有如上所述的隐式比例因子。 值的符号将始终由xxx个存储位指示(1 = 负数,0 = 非负数),即使小数位数大于或等于总位数。 例如,8 位有符号二进制整数 (11110101)2 = −11,采用 -3、+5 和 +12 隐含小数位,将表示值 −11/2−3 = −88、−11/ 25 = −0.343 75,和 −11/212 = −0.002 685 546 875,分别。

或者,负值可以用符号大小格式的整数表示,在这种情况下,符号永远不会包含在隐含分数位数中。 这种变体更常用于十进制定点运算。 因此,带符号的 5 位十进制整数 (−00025)10 与 -3、+5 和 +12 隐含的小数位数一起,将表示值 −25/10−3 = −25000,−25/105 = − 0.00025 和 −25/1012 = −0.000 000 000 025,分别为。

程序通常会假设将存储到给定变量中或将由给定指令生成的所有定点值都具有相同的比例因子。 这个参数通常可以由程序员根据需要的精度和要存储的值的范围来选择。

定点数运算

变量或公式的比例因子可能不会明确出现在程序中。 良好的编程习惯要求在文档中提供它,至少作为源代码中的注释。

比例因子的选择

为了提高效率,比例因子通常被选择为用于在内部表示整数的基数 b 的幂(正或负)。 然而,最佳比例因子通常由应用决定。 因此,人们经常使用 10 的幂次方的比例因子(例如,美元价值的 1/100),以方便人类使用,即使整数在内部以二进制表示。

0

点评

点赞

相关文章