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.

[参考译文] TMS320F2800137:先乘后除会导致溢出

Guru**** 2589265 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1347090/tms320f2800137-multiply-then-divide-causes-overflow

器件型号:TMS320F2800137

您好、

对于这种操作、如果16位乘以16位、然后除以、则临时结果将溢出。 可以在哪里设置编译器来避免结果错误?

谢谢

乔伊斯

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

    您好、Joyce、

    如果16位乘以16位再除以16位,则临时结果将溢出。

    这是预期的编译器行为。 有关如何在 C 代码中正确编写乘法、请参阅此应用手册。

    "关于乘法的一个常见误解是乘法以无限精度进行、然后被截断为结果类型。 不是这样;乘法将以*最窄*的合法类型(根据操作数的类型)进行,然后将*转换*为结果类型,这可能是一个缩小或扩大的转换。"

    为了获得正确的结果、您需要确保将乘以两个32位值、您可以显式声明这一点。

    (uint32_t) lv_ctl.p_val [0]*(uint32_t) cfg->Duty / 1000

    此致!

    马瑞安