fixed-point/integer 具有备用测量单位的表示的名称
Name of fixed-point/integer representation with alternate unit of measurement
在嵌入式 C 中处理信号和传感器值时,我们通常可以选择用浮点数(例如 IEEE 754)或定点数表示值,后者在没有浮点数单元时通常更受欢迎可用,因为我就是这种情况。
我想知道 solution/pattern 的名称是什么,我们只使用普通整数来表示没有小数的传感器值,因为我们只是更改测量单位,值以最大值的单位表示准确性。
例子
假设我有一个具有毫米精度的测距传感器(如接近传感器)。示例输出为 1.234 m
。我有以下选择来存储输出距离测量值:
- 浮点数,表示以米为单位的距离
- 定点,代表距离,单位为米,毫米保留3位小数
- 整数,代表距离毫米而不是米
在使用第三个选项进行算术运算时,我只需要注意具有足够大的整数以避免溢出。例如:计算由两个传感器测量的矩形面积是通过乘以两个以毫米为单位的距离 a*b
完成的,这需要两倍的位数,因为单位也是平方的:mm^2
.
非 SI 案例
相同的“第三个选项”表示可用于更复杂的东西,而不仅仅是 SI 前缀,例如 int32_t
表示 sqrt(2)
的 k
倍数而不是保存 k*sqrt(2)
直接转换为浮点数,即:存储 int32_t k_foo = 3;
而不是 float foo = 4.2426405f;
.
我的问题
数据表示中的“第三种选择”有正式名称吗?这就像没有小数位但具有非标准单位的定点数。 “小数位”隐含在使用的测量单位中。我很难在没有名字的情况下记录这个(有点愚蠢的)解决方案。
定点表示是缩放表示,反之亦然。来自 the Wikipedia page on fixed-point arithmetic:
A fixed-point representation of a fractional number is essentially an integer that is to be implicitly multiplied by a fixed scaling factor. For example, the value 1.23 can be stored in a variable as the integer value 1230 with implicit scaling factor of 1/1000 (meaning that the last 3 decimal digits are implicitly assumed to be a decimal fraction), and the value 1 230 000 can be represented as 1230 with an implicit scaling factor of 1000 (with "minus 3" implied decimal fraction digits, that is, with 3 implicit zero digits at right).
网页甚至给出了使用单位变化作为比例因子的例子:
However, other scaling factors may be used occasionally, e.g. a fractional amount of hours may be represented as an integer number of seconds; that is, as a fixed-point number with scale factor of 1/3600.
定点这个词的出现是因为通常用某种固定基数(例如二进制或十进制)的整数来表示一个数,并说表示的数是加上小数点得到的数(或二进制小数点或小数点)在数字中的固定位置。例如:
- 二进制数1101012可以表示110.1012的小数点后三位二进制数的定点格式。这相当于缩放 23.
- 十进制数1234可以表示小数点后三位小数的定点形式的12.34。这相当于缩放 102.
一般来说,定点格式将数字x表示为x•b e,其中 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 等于用于表示整数的基数的幂的缩放格式是有利的。
因此,定点表示和缩放表示之间没有数学差异,并且几乎没有语义差异(如果有的话)。无论哪种方式,缩放因子的选择都是一个实际问题,涉及计算的简便性和令人满意的精度,而不是格式是称为定点还是缩放。
在嵌入式 C 中处理信号和传感器值时,我们通常可以选择用浮点数(例如 IEEE 754)或定点数表示值,后者在没有浮点数单元时通常更受欢迎可用,因为我就是这种情况。
我想知道 solution/pattern 的名称是什么,我们只使用普通整数来表示没有小数的传感器值,因为我们只是更改测量单位,值以最大值的单位表示准确性。
例子
假设我有一个具有毫米精度的测距传感器(如接近传感器)。示例输出为 1.234 m
。我有以下选择来存储输出距离测量值:
- 浮点数,表示以米为单位的距离
- 定点,代表距离,单位为米,毫米保留3位小数
- 整数,代表距离毫米而不是米
在使用第三个选项进行算术运算时,我只需要注意具有足够大的整数以避免溢出。例如:计算由两个传感器测量的矩形面积是通过乘以两个以毫米为单位的距离 a*b
完成的,这需要两倍的位数,因为单位也是平方的:mm^2
.
非 SI 案例
相同的“第三个选项”表示可用于更复杂的东西,而不仅仅是 SI 前缀,例如 int32_t
表示 sqrt(2)
的 k
倍数而不是保存 k*sqrt(2)
直接转换为浮点数,即:存储 int32_t k_foo = 3;
而不是 float foo = 4.2426405f;
.
我的问题
数据表示中的“第三种选择”有正式名称吗?这就像没有小数位但具有非标准单位的定点数。 “小数位”隐含在使用的测量单位中。我很难在没有名字的情况下记录这个(有点愚蠢的)解决方案。
定点表示是缩放表示,反之亦然。来自 the Wikipedia page on fixed-point arithmetic:
A fixed-point representation of a fractional number is essentially an integer that is to be implicitly multiplied by a fixed scaling factor. For example, the value 1.23 can be stored in a variable as the integer value 1230 with implicit scaling factor of 1/1000 (meaning that the last 3 decimal digits are implicitly assumed to be a decimal fraction), and the value 1 230 000 can be represented as 1230 with an implicit scaling factor of 1000 (with "minus 3" implied decimal fraction digits, that is, with 3 implicit zero digits at right).
网页甚至给出了使用单位变化作为比例因子的例子:
However, other scaling factors may be used occasionally, e.g. a fractional amount of hours may be represented as an integer number of seconds; that is, as a fixed-point number with scale factor of 1/3600.
定点这个词的出现是因为通常用某种固定基数(例如二进制或十进制)的整数来表示一个数,并说表示的数是加上小数点得到的数(或二进制小数点或小数点)在数字中的固定位置。例如:
- 二进制数1101012可以表示110.1012的小数点后三位二进制数的定点格式。这相当于缩放 23.
- 十进制数1234可以表示小数点后三位小数的定点形式的12.34。这相当于缩放 102.
一般来说,定点格式将数字x表示为x•b e,其中 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 等于用于表示整数的基数的幂的缩放格式是有利的。
因此,定点表示和缩放表示之间没有数学差异,并且几乎没有语义差异(如果有的话)。无论哪种方式,缩放因子的选择都是一个实际问题,涉及计算的简便性和令人满意的精度,而不是格式是称为定点还是缩放。