繁体   English   中英

十进制浮点到定点转换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM