您好、香榭丽舍
我向我们的客户询问这一点。
客户发现、在使用 IQMath23进行计算时、负数的精度低于正数。 我用 F28069测试了它、我可以重现客户的问题。
例如,如果计算-0.00001*0.99,则计算结果与-0.00001*1相同。
但是如果它是0.001*0.99,则计算结果将会不同。
您能否帮助解释这种差异的发生原因? 谢谢!
此致、
Julia
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.
您好、香榭丽舍
我向我们的客户询问这一点。
客户发现、在使用 IQMath23进行计算时、负数的精度低于正数。 我用 F28069测试了它、我可以重现客户的问题。
例如,如果计算-0.00001*0.99,则计算结果与-0.00001*1相同。
但是如果它是0.001*0.99,则计算结果将会不同。
您能否帮助解释这种差异的发生原因? 谢谢!
此致、
Julia
尊敬的 Julia:
据我所知、 这不是编译器可以解决的问题、因为编译器不具有定点数据类型的可配置性。 我可以咨询另一位专家、看看是否有一些设置可以更改。 他们是否有特定的原因不想增加 Q 值? 有些函数可以在全局 Q 和特定 Q 类型(IQtoIQN 和 IQNtoIQ)之间进行转换、因此如果系统的其余部分使用特定的全局 Q 值、则不会出现问题。
此致、
Omer Amir
尊敬的 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