簡體   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