霍纳在C

时间:2017-11-01 11:32:50

标签: c math fixed-point

我很难用固定点算法跟踪Horner规则下的小数点。

int16_t horner(int16_t q)
{
    const int16_t c0 = 0x0033;
    const int16_t c1 = 0x0055;
    const int16_t c2 = 0x001C;
    const int16_t c3 = 0x0048;
    const int16_t c4 = 0x0200;

    horner_rule = c0 + q * (c1 - q * (c2 + q * (c3 - q * c4)));

    return horner_rule;
}

c0c1是不同的16位有符号系数,q是我想要评估的值({ {1}}被视为输入并转换为16位带符号格式)。所有这些值都已转换为带符号的16位格式。我已经在浮点运算中实现了它,它只是工作正常。

我的问题是,如何让我的期望值保持小数点并保持溢出控制?

1 个答案:

答案 0 :(得分:1)

首先要确定多项式的域和codomain以及部分域。然后,您可以调整移位以最小化截断错误,同时避免溢出。

如果你需要自动化这个过程,你必须找到所有这些多项式的最小值和最大值,这需要求解真正的根。