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.

[参考译文] TMS320F28034:使用 IQMath 时、正数和负数的精度不同。

Guru**** 2393725 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1123398/tms320f28034-the-precision-of-positive-and-negative-numbers-is-different-when-using-iqmath

器件型号:TMS320F28034

您好、香榭丽舍

我向我们的客户询问这一点。

客户发现、在使用 IQMath23进行计算时、负数的精度低于正数。  我用 F28069测试了它、我可以重现客户的问题。

例如,如果计算-0.00001*0.99,则计算结果与-0.00001*1相同

但是如果它是0.001*0.99,则计算结果将会不同。

您能否帮助解释这种差异的发生原因? 谢谢!

此致、

Julia

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Julia、

    我对此的最佳猜测是、由于_iq23数据类型范围的最大值略小于最小值的绝对值、 因此精度发生了微小的变化(请参阅 IQMath 快速入门指南的第10页)、 尽管只有在定点数的分辨率不一致时才会出现这种情况。 我也在我的一侧测试过这个、在我的一侧测试时得到的值仍在数据类型的分辨率范围内、因此这不是一个重大问题。

    此致、

    Omer Amir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 、Omer、

    感谢您的回复!  客户想要了解如何解决此问题? 他们希望提高负算术的精度。 客户当前的方法是首先将负数转换为正数、执行正数运算、然后将其转换为负数。  但客户认为这种方法太麻烦了、他们也不接受增加 IQ 数学的 Q 值以提高精度的方法。

    客户想知道这个问题是可以通过编译器解决还是通过库函数解决? 谢谢!

    此致、

    Julia

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Julia:

    据我所知、 这不是编译器可以解决的问题、因为编译器不具有定点数据类型的可配置性。 我可以咨询另一位专家、看看是否有一些设置可以更改。 他们是否有特定的原因不想增加 Q 值? 有些函数可以在全局 Q 和特定 Q 类型(IQtoIQN 和 IQNtoIQ)之间进行转换、因此如果系统的其余部分使用特定的全局 Q 值、则不会出现问题。

    此致、

    Omer Amir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 、Omer、

    这种情况是否有任何更新? 谢谢!

    此致、

    Julia

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Julia:

    这家图书馆的原始主人离开了,所以我联系了一位代表他的专家,但他直到12点才离开办公室,所以可能需要一些时间。 在平均时间内、您能否询问客户是否有特定原因不想增加 Q 值? 这将有助于我理解。

    此致、

    Omer Amir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 、Omer、

    由于客户有很多基于 IQmath 的代码、如果 Q 值增加、代码将被修改很多。  客户还担心增加 Q 值后会出现溢出问题。 谢谢!

    此致、

    Julia

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Julia:

    我与另一位专家进行了讨论、这就是他对当前情况的解释:

    "您看到的效果是因为截断。 下面是一个简单的示例:

    二进制文件

    有符号值

    截断的二进制值

    有符号值

    01.1

    1.5

    01.0

    1.0

    01.0

    1.0

    01.0

    1.0

    00.1.

    0.5.

    00.0

    0.0

    00.0

    0.0

    00.0

    0.0

    11.1.

    -0.5

    11.0

    -1.0

    11.0

    -1.0

    11.0

    -1.0

    10.1.

    -1.5

    10.0

    -2.0

    10.0

    -2.0

    10.0

    -2.0

    您可以看到、正分次数被截断为较小的数字、而负分次数被截断为较大的数字。 如果使用 IQ23rmpy()函数(在存储最终的32位值之前对颠簸的结果进行舍入),则将获得该示例的匹配值。"

    我希望这有助于澄清问题、但 IQMath 库似乎是这样设计的。

    此致、

    Omer Amir