[英]Decimal floating point to fixed point conversion
我正在尝试以定点格式缩放值1e-4
,但我很难获得准确的结果。 我将非常感谢任何帮助。 .
MATLAB:
fprintf('%10.16f|%10d|\n',fi(1e-4,0,32),storedInteger(fi(1e-4,0,32)))
0.0001000000000033 | 3518437209|
和
我正在用 C 定点表示法来做这件事。
uint32_t eps = 3518437209;
eps = (uint32_t)(eps / ((uint64_t)1 << 45));
与我的预期相反
0.0001000000000033
eps 的值为
0
谢谢!!
在 C 中执行此操作的最简单方法(我承认这可能无法满足您的要求)是这样的:
#include <stdio.h>
#include <inttypes.h>
int main()
{
double val = 1e-4;
uint32_t ival = val * 35184372088832. + 0.5;
printf("%u\n", ival);
}
那个神奇的比例因子35184372088832.
只是 2 45 ,我加上0.5
以便它四舍五入到最接近的定点值。 这是一种显而易见的方法,它适用于“普通”值,但它可能不适用于极端值,我什至不确定它对于大于约 1.22 的输入值是否有保证的行为e-4。
要将定点值转换回浮点数以便打印出来,只需执行相反的操作:
double val2 = ival / 35184372088832.;
printf("%.16f\n", val2);
在我的机器上,这会打印0.0001000000000033
。
如果您想在不使用涉及double
类型的值或算术的情况下执行任何这些操作,则可以完成,但这会困难得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.