具有替代测量单位的定点/整数表示的名称
Posted
技术标签:
【中文标题】具有替代测量单位的定点/整数表示的名称【英文标题】:Name of fixed-point/integer representation with alternate unit of measurement 【发布时间】:2021-11-08 14:08:55 【问题描述】:在嵌入式 C 中处理信号和传感器值时,我们通常可以选择以浮点(例如IEEE 754)或定点表示值,后者通常在没有可用的浮点单元时首选,因为这是我的情况。
我想知道解决方案/模式的名称是什么,我们只使用纯整数来表示不带小数的传感器值,因为我们只是更改了测量单位,值以最大精度的单位表示。
示例
假设我有一个精度为毫米的测距传感器(如接近传感器)。示例输出为1.234 m
。我有以下选择来存储输出距离测量:
-
浮点数,以米为单位表示距离
定点,以米为单位表示距离,毫米为小数点后三位
整数,以毫米而不是米表示距离
在使用第三个选项进行算术运算时,我只需要注意足够大的整数以避免溢出。例如:计算由两个传感器测量的矩形面积是通过将两个距离(以毫米为单位)相乘来完成的a*b
,这需要两倍的位数,因为单位也是平方:mm^2
。
非 SI 案例
同样的“第三个选项”表示可以用于比 SI 前缀更复杂的东西,比如 int32_t
表示 k
的倍数 sqrt(2)
而不是直接将 k*sqrt(2)
保存到浮点数中,即: 存储int32_t k_foo = 3;
而不是float foo = 4.2426405f;
。
我的问题
数据表示中的“第三个选项”有正式名称吗?这就像没有小数位但具有非标准单位的定点。 “小数位”隐含在使用的测量单位中。我很难记录这种没有名字的(有点愚蠢的)解决方案。
【问题讨论】:
当使用带公制前缀的 SI 单位时,这与十进制定点有何不同? 不同之处在于,metric前缀需要跨数据类型或变量名指示,可以直接对(+, -, *, /)进行操作,而不是使用定点API函数调用- 例如Q number format 中的数字总和。两者都在幕后使用整数。 目前尚不清楚您在不同单位的定点和整数之间有什么区别。如果我使用比例为 10^3 的定点将距离 1.234 m 存储在x
中,则 x
包含 1234。如果我将距离 1234 mm 存储在 x
中作为整数,则 x
包含1234. 如果我在y
中以同样的方式存储了一些距离4.321(y
中的4321),并且我用整数乘法运算将它们相乘,那么无论我是否考虑x
和@,乘积都是5,332,114 987654340@ 为定点米或整数毫米。
无论如何,如果你想要一个名字,你可以简单地称之为“缩放”。
您可以考虑阅读 NIST Guide for the Use of the International System of Units (SI)。尽管它在很大程度上涵盖了技术文档的编辑风格,但它对单位符号的含义有所了解。例如,我们不能将物理量存储在变量x
中;我们只能存储一个数字。所以,如果我们有一些长度 L,我们不应该说 x
包含 L,而是 x
包含 L/mm。也就是说,如果我们将长度(例如 12 英寸)除以 1 毫米,我们会得到一个数字 304.8。那么x
可能包含这个纯数字,一个无单位的数量。
【参考方案1】:
定点表示是缩放表示,反之亦然。来自the Wikipedia page on fixed-point arithmetic:
小数的定点表示本质上是一个整数,将隐式乘以一个固定的比例因子。例如,值 1.23 可以作为整数值 1230 存储在变量中,隐含比例因子为 1/1000(意味着最后 3 个小数位被隐式假设为小数),值 1 230 000 可以表示为 1230,隐含比例因子为 1000(“负 3”隐含十进制小数位,即右侧隐含 3 个零位)。
该网页甚至给出了使用单位变化作为比例因子的示例:
但是,有时可能会使用其他缩放因子,例如小数小时数可以表示为整数秒数;即,作为比例因子为 1/3600 的定点数。
术语“定点”的出现是因为通常使用某些固定基数(例如二进制或十进制)的整数来表示数字,并说所表示的数字是通过放置小数点(或二进制点或小数点)在数字中的固定位置。例如:
二进制数字 1101012 可以表示 110.1012 的定点格式,小数点后有三个二进制数字。这相当于按 23 缩放。 十进制数字 1234 可以表示 12.34 的定点格式,小数点后有三位十进制数字。这相当于缩放 102。一般来说,定点格式将一个数x表示为x•be ,其中 b 和 e 是固定的。缩放格式将数字 x 表示为 x•S,其中 S 是固定的。 这两个是等价的。任何定点格式x•be是缩放格式 x•S 其中 S = be,任何缩放格式x•S都是定点格式x•be 其中 b = S 和 e = 1。
整数表示是定点表示的一个平凡子集,其中 e = 0。
定点格式和缩放格式的一个区别在于使用基础b中的算术易于实现。通常,实现乘法和除法需要按比例进行乘法和除法。给定 x 和 y 表示 x' = x•S 和 y' = y•S:
加法是通过添加表示来实现的:(x+y)' = x' + y' . 减法是通过减法实现的:(x-y)' = x' - y' . 乘法是通过乘法和补偿比例实现的:(x•y)' = x'•y' / S. 除法实现类似:(x/y)' = x'•S/y'。乘法需要时间和精力,除法更是如此。如果使用定点表示,其中 b 等于用于表示整数的基数,则乘法和除法可以用移位代替。因此,选择 b 等于用于表示整数的基数的定点格式是有利的。等效地,选择 S 等于用于表示整数的底数的幂的比例格式是有利的。
因此,定点表示和缩放表示之间没有数学上的差异,并且几乎没有语义差异(如果有的话)。无论哪种方式,缩放因子的选择都是一个实际问题,涉及计算的简易性和令人满意的精度,而不是格式是定点还是缩放。
【讨论】:
以上是关于具有替代测量单位的定点/整数表示的名称的主要内容,如果未能解决你的问题,请参考以下文章