This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
我正在尝试在 Python 中模拟一些 IQmath 操作。 我已经注意到_Q15div (0x003c、0x888)不会生成0xc000、而是生成0xc001。 正确答案是-0.5 (0xc000)、但除法返回-0.499969482421875 (0xc001)。 我注意到 IQmath pdf 中的14位_QNdiv 精度表可作为显示差异的原因。 我想知道:
*库的-0.4999答案是否正确? 或者它应该是-0.5? 即它是错误吗?
*有没有办法用 Python (或其他高级语言)来做这个数学,得到同样的结果? 如果我将60 (0x003c)除以-120 (0xff88)、得到-0.5。
我的目标是在 Python 中模拟固件。 如果数学有一点不准确、对我的代码来说无关紧要、但我确实需要对其进行仿真(这更难做到)。
谢谢你。
是否要创建虚拟机并模拟机器代码?
模拟机器码。 我想复制机器码的输出。 我必须采取与去年为另一个处理器复制浮点舍入误差类似的措施。
IQ 数学没有什么特别之处。 它只是定点的简化版本。 整数运算进行整数运算。
定点加减微不足道、但乘法和除法需要固定二进制点。 导致额外的危险。 其中一个是如何处理最低有效端上会丢失的额外位。 你只是截断或舍入吗? 选择将影响结果的 lsb。
看看_QNdiv.o 中的代码、我看到对乘法硬件的引用。 我不会深入研究,但这表明它是使用乘数来计算一个互惠。 但会引入其自身的误差来源。