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.

[参考译文] TMS320F28375S:I32TOFP32操作码在最大正带符号整数时提供意外结果

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/982356/tms320f28375s-i32tofp32-opcode-gives-unexpected-result-at-max-positive-signed-integer

器件型号:TMS320F28375S

我们正在处理一个意外结果、发现操作码 I32TOFP32中的转换在我们将 2、147、483、647转换为单精度浮点数时会产生意外结果。  我们期望得到一个十六进制(十进制)表示 为0x4f000000 (2147483648.0)的值、但得到的值却是0x4effFFFF (2147483520.0)。  2147483648.0的预期值 似乎与 IEEE-754标准一致、因为 2147483520.0的值远低于原始值、因此绝对差值为127.0而不是1.0。

您能帮我们了解在最大正带符号32位整数上使用 I32TOFP32时看到的结果吗?

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

    约旦、您好!

    如   您所示、ISA 中的指令是 I32ToF32、而不是 I32TOFP32。 您能否检查情况是否如此? 此外、您能否检查项目中的处理器设置中是否启用了 fpu32?

    我还想查看您的 C 代码和 asm 代码的代码片段、其中会发生这种情况。  

    -Shantanu

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

    您好、Shantanu、

    你是对的、我输入了操作码的名称。  我们启用了 fpu32。

    以下是与数据类型相关的代码行:

    float out、scale;
    
    signed long 计数;
    
    out =(float)计数* scale; 

    以下是代码行的反汇编列表的一个片段:

    257 0000003a E288 I32TOF32 R0H、*-SP[20];[CPU_Fpu]|174|0000003b
    0054
    258 0000003c E2AF MOV32 R1H、*+XAR4[6];[CPU_Fpu]|174|0000003d
    01F4
    259 000000E700 MPYF32 R0H、*+XAR4[6];[CPU_300241Q24|CPU 300241U];
    
    [CPU 300241Q241U]|000241Q241Q241Q24_024_024_024_024_0Q24_024_0Q24_024_024_024];
    [CPU
    

    谢谢、

    -约旦

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

    约旦

    由于尾数仅允许23位、因此输出0x4EFFFFFF 与规范化和截断过程一致。 因此、它将标准化为最近 的2^n 倍数。 四舍五入过程如下:

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

    您好、Shantanu、

    感谢您提供详细信息。  我认为这解决了我们需要了解硬件行为的问题。  那么、公平地说、考虑到这种实现、可能会出现转换不能产生最精确的情况吗?  尤其是与基于软件的转换可以执行的操作相比?  我们看到、当我们获取相同的整数值0x7FFFFFFF 并将其转换为 Code Composer Studio 观察窗口中的浮点值时、该数值会更准确。

    谢谢、

    -约旦  

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

    约旦

    即使您在软件中执行此操作、也必须考虑其他位置的舍入误差、这在结果中不会立即明显。 对于 IEEE-754、由于23位宽尾数而产生的限制将持续存在。 您必须以任一方式解决此错误。

    -Shantanu